应用国际化(2) -欧洲杯足彩官网

`
hbxflihua
  • 浏览: 653116 次
  • 性别:
  • 来自: 杭州
最近访客
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 0)
    • ( 1)
    存档分类
    最新评论

    应用国际化(2)

    介绍了应用国际化需要考虑的问题,本篇介绍后端如何实现提示语的国际化。

     

    先说说系统框架,本项目采用react spring mybatis rabbitmq redis等主流框架组合搭建而成,前后端分离。不得不说,在spring framework的加持下,做什么事情都方便的多。

     

    1、添加langcookiefilter,拦截参数中带有lang的请求,并将语言标识存入cookie。

    import java.io.ioexception;
    import javax.servlet.filter;
    import javax.servlet.filterchain;
    import javax.servlet.filterconfig;
    import javax.servlet.servletexception;
    import javax.servlet.servletrequest;
    import javax.servlet.servletresponse;
    import javax.servlet.http.cookie;
    import javax.servlet.http.httpservletrequest;
    import javax.servlet.http.httpservletresponse;
    import org.apache.commons.lang3.stringutils;
    public class langcookiefilter implements filter {
        // 默认参数名称
        public static final string default_param_name = "lang";
        
    	@override
    	public void init(filterconfig filterconfig) throws servletexception {}
    	@override
    	public void dofilter(servletrequest arg0, servletresponse arg1, filterchain chain)
    			throws ioexception, servletexception {
    		
    		httpservletrequest request = (httpservletrequest)arg0;
    		httpservletresponse response = (httpservletresponse)arg1;
    		
    		string lang = request.getparameter(default_param_name);
    		if(stringutils.isnotempty(lang)){
    			cookie[] cookies = request.getcookies();
    			boolean flag = false;
    			if(cookies != null){
    				for (cookie cookie : cookies) {
    					if(cookie.getname().equals(default_param_name)){
    						cookie.setvalue(lang);
    						flag = true;
    					}				
    				}				
    			}
    			if(!flag){
    				cookie cookie = new cookie(default_param_name, lang);
    				cookie.sethttponly(true);
    				response.addcookie(cookie);
    			}			
    		}
    		chain.dofilter(arg0, arg1); 
    	}
    	@override
    	public void destroy() {}
    }

     

    2、配置web.xml  将langcookiefilter添加到web.xml中。另外还需配置requestcontextlistener监听,方便在messagesourceutils中使用

    	
    	
    		langcookiefilter
    		com.rongdu.framework.core.common.cookie.langcookiefilter
    	
    	
    		langcookiefilter
    		*.htm
    	
    	
    
            org.springframework.web.context.request.requestcontextlistener  
    

       后来看了requestcontextlistener代码,感觉langcookiefilter的做法有些多余,后续再研究。

     

    3、springmvc配置文件中添加i18n支持

    	  
    	
    		
    	  
    	
    	  
    	  
    	      
    	          
    	              
    	            classpath:i18n/message  
    	            classpath:org/hibernate/validator/validationmessages  
    	          
    	      
    	      
    	      
    	      
    	

     

    4、添加messagesourceutils工具类,获取国际化文件中国际化字段信息

    import java.util.locale;
    import javax.servlet.http.cookie;
    import javax.servlet.http.httpservletrequest;
    import org.springframework.web.context.request.requestcontextholder;
    import org.springframework.web.context.request.servletrequestattributes;
    import com.rongdu.framework.core.common.context.constant;
    import com.rongdu.framework.core.common.cookie.langcookiefilter;
    /**
     * 国际化语言工具类
     * @author lh@erongdu.com
     * @version 2.0
     * @since 2018-12-26
     *
     */
    public class langutil {
    	
    	public static string get(){
    		httpservletrequest request = ((servletrequestattributes) requestcontextholder.getrequestattributes()).getrequest();
        	cookie[] cookies = request.getcookies();
        	if(cookies != null){    		
    	    	for (cookie cookie : cookies) {
    				if(cookie.getname().equals(langcookiefilter.default_param_name)){
    					return cookie.getvalue();
    				}
    	    	}
    		}
        	return constant.default_lang;		
    	}
    	public static locale getlocale(){
        	return new locale(get());
        }
    }
    

     

    import java.util.locale;
    import org.slf4j.logger;
    import org.slf4j.loggerfactory;
    import org.springframework.beans.factory.annotation.autowired;
    import org.springframework.context.messagesource;
    import org.springframework.stereotype.component;
    /**
     * 资源国际化工具类
     * @author lh@erongdu.com
     * @version 2.0
     * @since 2018-12-24
     */
    @component
    public class messagesourceutils {
        // 日志
        private static final logger logger = loggerfactory.getlogger(messagesourceutils.class);
        
        private static messagesource messagesource;
        
        @autowired
        public void setmessagesource(messagesource messagesource) {
    		messagesourceutils.messagesource = messagesource;
    	}
        /**
         * 获取国际化文件中国际化字段信息
         * @param key	国际化参数
         * @param args	动态参数
         * @return
         */
        public static string getmessage(string key, object[] args) {
        	try {
        		return messagesource.getmessage(key, args, key, langutil.getlocale());
        	} catch (exception e) {
        		logger.error(e.getmessage());
        	}
        	return key;
        }
        
        /**
         * 可供后台使用
         * 获取国际化文件中中文字段信息
         * @param key	国际化参数
         * @param args	动态参数
         * @return
         */
        public static string getchinesemessage(string key, object[] args) {
        	try {
        		return messagesource.getmessage(key, args, key, locale.chinese);
        	} catch (exception e) {
        		logger.error(e.getmessage());
        	}
        	return key;
        }
        
    //	/**
    //     * 获取国际化文件中国际化字段信息
    //     * @param key	国际化key
    //     * @param args	动态参数
    //     * @return
    //     */
    //    public static string getmessage(string key, object[] args) {
    //        try {
    //            locale locale = localecontextholder.getlocale();
    //            return messagesource.getmessage(key, args, key, locale);
    //        } catch (exception e) {
    //        	logger.error(e.getmessage());
    //        }
    //        return key;
    //    }
    }

     

    5、在controller、service等层使用messagesourceutils工具类

    import org.springframework.stereotype.controller;
    import org.springframework.ui.model;
    import org.springframework.web.bind.annotation.requestmapping;
    import com.rongdu.framework.core.common.util.messagesourceutils;
    @controller
    public class indexcontroller{
    	/**
    	 * 凯发推荐首页
    	 * @return
    	 * @throws exception
    	 */
    	@requestmapping(value = "/home.htm")
    	public string home(model model){
    		model.addattribute("title", messagesourceutils.getmessage("title", null));
    		return "home";
    	}
    	
    }

     

    分享到:
    |
    • 2018-12-26 20:39
    • 浏览 637
    • 分类:互联网
    评论

    相关推荐

      国际化版本应用,国际化语言切换及系统配置应用。springmvc国际化代码应用。

      java web应用国际化与分页 java web应用国际化与分页 java web应用国际化与分页

      【eoeandroid特刊】第五期:资源与应用国际化布 (其余《eoeandroid特刊》请查阅我的资源列表) 1.源和资产(resources and assets) 2.android 中可用的资源类型 3.resources and internationalization(资源和国际化)...

      struts 2 国际化应用

      文档中介绍了struts2中国际化的实现原理和使用方法,同时介绍了应用程序的国际化的实现思路和方法以及示例!

      对于某些应用系统而言,它需要发布到不同的国家地区,因此需要特殊的做法来支持,也即是国际化。通过国际化的方式,实现界面信息,各种提示信息等内容根据不同国家地区灵活展示的效果。比如在中国,系统以简体中文...

      qt应用程序国际化示例代码,包含静态加载和动态切换语言两种方式。

      ios应用程序国际化,能实现语言切换,非常好用。

      ios国际化 应用内切换语言更新版

      国际化与本地化的概念,web应用的中文本地化,struts框架对国际化的支持

      设计java ee应用程序-- j2ee应用程序国际化和本地化.doc

      论人脸识别技术的国际化区域诉讼证据应用.pdf

      go 需要支持 i18n (国际化) 工具,但是现有的 go 程序的国际化支持都比较冗长繁杂。i18n4go提供一个应用工作流进程 —— 从 go 应用中提取字符串,合并他们到单个包(消除冗余),准备翻译,使底层代码容易接收他们...

      android应用内和系统设置,两种设置多语言国际化。代码完整,包括切换简体,繁体中文和英文

      qt应用程序国际化工程示例

      # 国际化(应用名称 文字 图片的国际化适应)附带参考链接在readme.md中

      本地化与国际化.zipios应用例子源码下载本地化与国际化.zipios应用例子源码下载 1.适合学生学习研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

      ios应用程序国际化 博客文章:http://blog.csdn.net/z251257144/article/details/8288028

      这样估计以后会有中文版的flex2 了...),使用flex2的本地化特性我们可以很容易创建多语言本地化的flex应用,为我们的flex应用打入国际市场添威助力,不过不像java的 本地化资源动态获取的方式,目前flex2的本地化...

      能够支持多个国家或者地区的本地化应用,国际化的应用

    global site tag (gtag.js) - google analytics
    网站地图