最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于springboot i18n國際化后臺多種語言設(shè)置的方式

 更新時間:2021年06月22日 12:06:14   作者:從心歸零  
這篇文章主要介紹了基于springboot i18n國際化后臺多種語言設(shè)置的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

之前有做過手機端后臺的國際化,因為手機統(tǒng)一傳遞了language參數(shù)

所以只要設(shè)置LocaleChangeInterceptor就行了

/**
 * 配置國際化語言
 */
@Configuration
public class LocaleConfig extends WebMvcConfigurerAdapter{
 /**
     * 默認解析器 其中l(wèi)ocale表示默認語言
     */
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.CHINA);
        return localeResolver;
    }
    //springboot1.5
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
     LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
      localeInterceptor.setParamName("language");
      registry.addInterceptor(localeInterceptor);
    }
}

對于某些特殊的后臺運行代碼,比如定時器,我則使用getByLanguage方法

/**
 * 國際化工具類
 */
@Component
public class MessageUtils{ 
    private static MessageSource messageSource;    
    static SysErrorLogDao sysErrorLogDao; 
	@Resource
	public void setSysErrorLogDao(SysErrorLogDao sysErrorLogDao) {
		MessageUtils.sysErrorLogDao = sysErrorLogDao;
	}
	private static Logger logger = LoggerFactory.getLogger(MessageUtils.class);
    public MessageUtils(MessageSource messageSource) {
    	MessageUtils.messageSource = messageSource;
    }
 
    /**
     * 獲取單個國際化翻譯值
     * @param msgKey
     * @param defaultMsg
     * @return
     */
    public static String get(String msgKey, String defaultMsg) {
        try {
            return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
        } catch (Exception e) {
        	logger.error(e.getMessage(), e);
        	String message = StringUtils.getExceptionStackTraceMessage(e);
			if(message != null && message.length() > 1000) {
				message = message.substring(0, 999);
			}
			SysErrorLogModel errorLog = new SysErrorLogModel();
			errorLog.setContent(msgKey);
			errorLog.setType("messageUtils");
			errorLog.setCreateDate(new Date());
			errorLog.setClassName(MessageUtils.class.getName());
			errorLog.setMessage(message);
			sysErrorLogDao.save(errorLog);
            return defaultMsg;
        }
    }
    /**
     * 獲取多個參數(shù)取代的國際化翻譯值
     * @param msgKey
     * @param defaultMsg
     * @param arg
     * @return
     */
    public static String get(String msgKey, String defaultMsg, Object... arg) {
        try {
        	msgKey = messageSource.getMessage(msgKey, arg, LocaleContextHolder.getLocale());
            return msgKey;
        } catch (Exception e) {
        	logger.error(e.getMessage(), e);
        	String message = StringUtils.getExceptionStackTraceMessage(e);
			if(message != null && message.length() > 1000) {
				message = message.substring(0, 999);
			}
			SysErrorLogModel errorLog = new SysErrorLogModel();
			errorLog.setContent(msgKey);
			errorLog.setType("messageUtils");
			errorLog.setCreateDate(new Date());
			errorLog.setClassName(MessageUtils.class.getName());
			errorLog.setMessage(message);
			sysErrorLogDao.save(errorLog);
            return MessageFormat.format(defaultMsg, arg);
        }
    }
    /**
     * 指定語言獲得單個國際化翻譯值
     * @param msgKey
     * @param defaultMsg
     * @param language
     * @return
     */
    public static String getByLanguage(String msgKey, String defaultMsg, String language) {
    	try {
    		Locale locale = new Locale(language);
        	msgKey = messageSource.getMessage(msgKey, null, locale);
            return msgKey;
        } catch (Exception e) {
        	logger.error(e.getMessage(), e);
        	String message = StringUtils.getExceptionStackTraceMessage(e);
			if(message != null && message.length() > 1000) {
				message = message.substring(0, 999);
			}
			SysErrorLogModel errorLog = new SysErrorLogModel();
			errorLog.setContent(msgKey);
			errorLog.setType("messageUtils");
			errorLog.setCreateDate(new Date());
			errorLog.setClassName(MessageUtils.class.getName());
			errorLog.setMessage(message);
			sysErrorLogDao.save(errorLog);
            return defaultMsg;
        }
    }
    /**
     * 指定語言獲取多參數(shù)取代的國際化翻譯值
     * @param msgKey
     * @param defaultMsg
     * @param language
     * @param arg
     * @return
     */
    public static String getByLanguage(String msgKey, String defaultMsg, String language, Object... arg) {
    	try {
    		Locale locale = new Locale(language);
        	msgKey = messageSource.getMessage(msgKey, arg, locale);
            return msgKey;
        } catch (Exception e) {
        	logger.error(e.getMessage(), e);
        	String message = StringUtils.getExceptionStackTraceMessage(e);
			if(message != null && message.length() > 1000) {
				message = message.substring(0, 999);
			}
			SysErrorLogModel errorLog = new SysErrorLogModel();
			errorLog.setContent(msgKey);
			errorLog.setType("messageUtils");
			errorLog.setCreateDate(new Date());
			errorLog.setClassName(MessageUtils.class.getName());
			errorLog.setMessage(message);
			sysErrorLogDao.save(errorLog);
            return MessageFormat.format(defaultMsg, arg);
        }
    }
}

但是后面又要做網(wǎng)頁的國際化,因為網(wǎng)頁沒有傳遞統(tǒng)一的語言參數(shù),如果要一一添加的話太過麻煩,于是就要用到cookie來保存?zhèn)鬟f語言

這個時候就要實現(xiàn)自己的解析器了

public class MyLocaleResolver implements LocaleResolver {
	@Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        Locale locale = Locale.getDefault();
        {
        	//通過參數(shù)解析locale,language參數(shù)優(yōu)先
        	String temp = httpServletRequest.getParameter("language");
        	if (!StringUtils.isEmpty(temp)) {
        		locale = new Locale(temp);
        		return locale;
        	}
        }
        //得到cookie,解析locale
        Cookie[] cookies = httpServletRequest.getCookies();
        if(cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("userLanguage")) {
                    String temp = cookie.getValue();
                    if (!StringUtils.isEmpty(temp)) {
                        locale = new Locale(temp);
                    }
                    continue;
                }
            }
        }
        return locale;
    }
 
    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
    }
}
@Configuration
public class LocaleConfig extends WebMvcConfigurerAdapter{
    @Bean
    public LocaleResolver localeResolver() {
        MyLocaleResolver localeResolver = new MyLocaleResolver();
        return localeResolver;
    }
}

這樣就實現(xiàn)了使用cookie來設(shè)置語言

不過最后還是有所遺漏,因為我們的分布式項目中用到了很多http的內(nèi)部調(diào)用,用不上cookie,也沒有l(wèi)anguage參數(shù)。

但是大部分的內(nèi)部調(diào)用都有傳遞公司id,可以通過公司獲得公司對應(yīng)的語言。

可以在攔截器里面直接加入對companyId的解析但是我考慮有沒有通用的實現(xiàn)方法,就是在任何地方,甚至的運行到一半中途設(shè)置語言的辦法。

初步想法是拿到線程中的Locale進行設(shè)置

然后我看了下源碼LocaleContextHolder.getLocale()

發(fā)現(xiàn)調(diào)用的是一個LocaleContext類的方法。

然后查詢哪些地方調(diào)用了LocaleResolver.resolveLocale

發(fā)現(xiàn)第一個方法里面返回了一個匿名函數(shù)LocaleContext,其getLocale就是直接調(diào)用localeResolver.resolveLocale方法。

于是我合理的猜想框架里不是通過攔截器設(shè)置一個locale,而是每次調(diào)用LocaleContextHolder.getLocale()都會執(zhí)行l(wèi)ocaleResolver.resolveLocale(request)方法,所以我們只要設(shè)置request屬性就行了

public class MyLocaleResolver implements LocaleResolver {
	@Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        //得到cookie,解析locale
        Locale locale = Locale.getDefault();
        {
        	//通過參數(shù)解析locale
        	String temp = httpServletRequest.getParameter("language");
        	if (!StringUtils.isEmpty(temp)) {
        		locale = new Locale(temp);
        		return locale;
        	}
        }
        {
        	String temp = (String) httpServletRequest.getAttribute("language");
        	if (!StringUtils.isEmpty(temp)) {
        		locale = new Locale(temp);
        		return locale;
        	}
        }
        Cookie[] cookies = httpServletRequest.getCookies();
        if(cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("userLanguage")) {
                    String temp = cookie.getValue();
                    if (!StringUtils.isEmpty(temp)) {
                        locale = new Locale(temp);
                    }
                    continue;
                }
            }
        }
        return locale;
    }
 
    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
    }
}
    @RequestMapping("/test")                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
    public String test(HttpServletRequest request) {
    	String result = "";
		request.setAttribute("language", "ch");
		result += MessageUtils.get("test", "測試");
		request.setAttribute("language", "en");
		result += MessageUtils.get("test", "測試");
        return result;
    }

messages_ch.properties

test=測試

messages_en.properties

test=test

這樣我們就實現(xiàn)了在任何地點,甚至中途變換語言了

發(fā)現(xiàn)LocaleContextHolder.getLocale()在實體類中也可以調(diào)用。因此可以后臺保存json格式,在get方法中根據(jù)語言返回相應(yīng)的值。

我本來想直接改造原來的字段,但是發(fā)現(xiàn)緩存會直接讀取get中的值,下次讀取就不是json了,所以只好麻煩點增加一個字段了

	public String getFullNameByLanguage() {
		String language = LocaleContextHolder.getLocale().getLanguage();
		Map<String, String> map;
		try {
			map = JsonUtil.string2Obj(fullName);
			return map.get(language);
		} catch (IOException e) {
			return fullName;
		}
	}

當使用@Async異步方法時,LocaleContext就是空的。這時候需要強制設(shè)置語言LocaleContextHolder.setLocale(Locale locale),當然一般的方法也可以用這個來設(shè)置語言,不過這樣的話就不會再調(diào)用localeResolver.resolveLocale(request)方法了

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java簡單統(tǒng)計字符串中漢字,英文字母及數(shù)字數(shù)量的方法

    Java簡單統(tǒng)計字符串中漢字,英文字母及數(shù)字數(shù)量的方法

    這篇文章主要介紹了Java簡單統(tǒng)計字符串中漢字,英文字母及數(shù)字數(shù)量的方法,涉及java針對字符串的遍歷、編碼轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • java驗證電話號碼的方法

    java驗證電話號碼的方法

    這篇文章主要介紹了java驗證電話號碼的方法,需要的朋友可以參考下
    2014-02-02
  • 在Spring Boot中加載XML配置的完整步驟

    在Spring Boot中加載XML配置的完整步驟

    這篇文章主要給大家介紹了關(guān)于在Spring Boot中加載XML配置的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Spring?Cloud?Hystrix原理與注意事項小結(jié)

    Spring?Cloud?Hystrix原理與注意事項小結(jié)

    本文介紹了Hystrix的基本概念、工作原理以及其在實際開發(fā)中的應(yīng)用方式,通過對Hystrix的深入學習,開發(fā)者可以在分布式系統(tǒng)中實現(xiàn)精細的錯誤處理機制,并能夠及時響應(yīng)系統(tǒng)中的異常,避免服務(wù)的連鎖崩潰,感興趣的朋友一起看看吧
    2025-03-03
  • SpringAop日志找不到方法的處理

    SpringAop日志找不到方法的處理

    這篇文章主要介紹了SpringAop日志找不到方法的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳細易懂帶你了解Spring中的注解

    詳細易懂帶你了解Spring中的注解

    這篇文章主要介紹了詳細易懂帶你了解Spring中的注解,Spring的一個核心是IOC,是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式,需要的朋友可以參考下
    2023-08-08
  • Spring?Boot?基于?SCRAM?認證集成?Kafka?的過程詳解

    Spring?Boot?基于?SCRAM?認證集成?Kafka?的過程詳解

    在本篇文章中,我們將探討如何在?Spring?Boot?應(yīng)用中集成?Kafka?并使用?SCRAM?認證機制進行安全連接,并實現(xiàn)動態(tài)創(chuàng)建賬號、ACL?權(quán)限、Topic,以及生產(chǎn)者和消費者等操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Maven打包jar包沒有主屬性問題解決方案

    Maven打包jar包沒有主屬性問題解決方案

    這篇文章主要介紹了Maven打包jar包沒有主屬性問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java復合語句的使用方法詳解

    Java復合語句的使用方法詳解

    這篇文章主要介紹了Java編程中復合語句,結(jié)合相關(guān)的具體實例介紹了其用法,需要的朋友可以參考下
    2017-09-09
  • SpringBoot + MapStruct 屬性映射工具的使用詳解

    SpringBoot + MapStruct 屬性映射工具的使用詳解

    MapStruct 是一個代碼生成器,簡化了不同的 Java Bean 之間映射的處理,所謂的映射指的就是從一個實體變化成一個實體。接下來通過本文給大家介紹SpringBoot + MapStruct 屬性映射工具的使用,需要的朋友可以參考下
    2021-09-09

最新評論

宣汉县| 娄烦县| 乌兰浩特市| 永登县| 巴里| 沂源县| 齐河县| 九寨沟县| 邮箱| 潮州市| 乌苏市| 湛江市| 莱芜市| 康定县| 桦南县| 和静县| 枣阳市| 文山县| 方正县| 普宁市| 建瓯市| 杭州市| 平乡县| 安远县| 清徐县| 新化县| 津南区| 犍为县| 大埔区| 绩溪县| 陇南市| 苍梧县| 高青县| 云梦县| 天全县| 庆城县| 威海市| 商水县| 舟曲县| 垣曲县| 鄢陵县|