• 使用JSP的fmt标签实现国际化支持


    使用JSP的fmt标签实现国际化支持

      Smart-framework框架使用smart-plugin-i18n插件来完成国际化处理,原理相同,使用过滤器进行参数设置。

    ====================

    使用JSP的fmt标签配置i18n国际化资源文件可以实现根据不同的地区和语言切换不同的显示.

    具体做法如下:

    1.在JSP页面中添加fmt标签的引用:

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

    2.设置需要用到的bundle :

    <fmt:setBundle basename="i18n/i18n_${system_language}"/>

    其中,system_language是从request中传入的

    3.在需要显示变量的地方使用fmt标签来显示:

    <div style="font-size: large;color: darkcyan">
        <fmt:message key="common.bookname"/>
    
    </div>

    这里为了演示,假设我们需要显示的东西是是引用的资源文件里的common.bookname这个属性

    4.在src/main/resources 路径下新建i18n文件夹(或者在其他的路径下也可以,编译之后,文件夹要在classes目录下),新建资源文件 i18n_en_US.properties 和 i18n_zh_CN.properties,内容如下:

    i18n_en_US.properties:

    common.copyright=Copyright u00A9 2013
    common.language=language
    common.bookname=HTTP by picture

    i18n_zn_CN.properties:

    common.copyright=u7248u6743u6240u6709 u00A9 2013
    common.language=u7cfbu7edfu8bedu8a00
    common.bookname=u56feu89e3HTTP

    5.在服务器端添加一个filter,在请求中判断需要显示哪种语言,通过设置system_language的值,使页面的显示发生变化:

    复制代码
    package com.jiaoyiping.websample;
     /*
      * Created with Intellij IDEA
      * USER: 焦一平
      * Mail: jiaoyiping@gmail.com
      * Date: 2016/10/19
      * Time: 14:27
      * To change this template use File | Settings | Editor | File and Code Templates
     */
    
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    import java.util.Locale;
    
    @WebFilter(urlPatterns = "/*")
    public class I18NFilter implements Filter {
        private static final String COOKIE_LANGUAGE = "cookie_language";
        private static final String SYSTEM_LANGUAGE = "system_language";
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            String systemLanguage = getSystemLanguage(httpServletRequest);
            request.setAttribute(SYSTEM_LANGUAGE, systemLanguage);
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
            System.out.println("init....");
        }
    
        private String getSystemLanguage(HttpServletRequest request) {
            String systemLanguage = null;
            Cookie[] cookies = request.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    if (COOKIE_LANGUAGE.equals(cookie.getName())) {
                        systemLanguage = cookie.getValue();
                        break;
                    }
                }
            }
    
            if (systemLanguage == null || "".equals(systemLanguage)) {
                systemLanguage = request.getLocale().toString();
            }
            if (systemLanguage == null || "".equals(systemLanguage)) {
                systemLanguage = Locale.getDefault().toString();
            }
            return systemLanguage;
        }
    }
    复制代码

    我们通过request.setAttribute("system_language",${system_language}); 来改变JSP中的bundle的名字,实现切换显示语言的功能,

    getSystemLanguage()方法,先是从cookie中找显示语言,若没有找到,则使用浏览器的语言,如果是空,则取操作系统的默认语言

    5.为了能够动态显示出来效果,我们提供两个按钮,点击之后可以切换语言:

    复制代码
    <div id="footer">
        <div id="copyright">
            <span><fmt:message key="common.copyright"/></span>
        </div>
        <div id="language">
            <span><fmt:message key="common.language"/>:</span>
            <a href="#" data-value="zh_CN">中文</a>
            <span>|</span>
            <a href="#" data-value="en_US">English</a>
        </div>
    </div>
    复制代码

    引入jquery文件,在dom被加载完毕之后执行一些操作

    复制代码
    <script type="text/javascript">
            $(function () {
                $('#language').find('a').click(function () {
                    var language = $(this).data('value');
                    document.cookie = "cookie_language=" + language +
                            ";expires=365";
                    location.reload();
                });
            });
        </script>
    复制代码

    最终的结果实现了点击切换语言的功能(截取的git图,没有鼠标放到链接上的小手,所以显示的有点不太清楚):

    Smart-framework
    智能框架
  • 相关阅读:
    SpringBoot常用注解(二)
    SpringBoot常用注解(一)
    Spring Dl解释
    Spring 入门程序
    Spring 入门
    JUnit-4.13使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
    测试中Android与IOS分别关注的点
    python包中__init__.py的作用
    python自动发送测试报告(五)
    搭建一个有条理的项目(四)
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/11832876.html
Copyright © 2020-2023  润新知