欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于springboot i18n國(guó)際化后臺(tái)多種語(yǔ)言設(shè)置的方式

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

之前有做過手機(jī)端后臺(tái)的國(guó)際化,因?yàn)槭謾C(jī)統(tǒng)一傳遞了language參數(shù)

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

/**
 * 配置國(guó)際化語(yǔ)言
 */
@Configuration
public class LocaleConfig extends WebMvcConfigurerAdapter{
 /**
     * 默認(rèn)解析器 其中l(wèi)ocale表示默認(rèn)語(yǔ)言
     */
    @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);
    }
}

對(duì)于某些特殊的后臺(tái)運(yùn)行代碼,比如定時(shí)器,我則使用getByLanguage方法

/**
 * 國(guó)際化工具類
 */
@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;
    }
 
    /**
     * 獲取單個(gè)國(guó)際化翻譯值
     * @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;
        }
    }
    /**
     * 獲取多個(gè)參數(shù)取代的國(guó)際化翻譯值
     * @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);
        }
    }
    /**
     * 指定語(yǔ)言獲得單個(gè)國(guó)際化翻譯值
     * @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;
        }
    }
    /**
     * 指定語(yǔ)言獲取多參數(shù)取代的國(guó)際化翻譯值
     * @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)頁(yè)的國(guó)際化,因?yàn)榫W(wǎng)頁(yè)沒有傳遞統(tǒng)一的語(yǔ)言參數(shù),如果要一一添加的話太過麻煩,于是就要用到cookie來保存?zhèn)鬟f語(yǔ)言

這個(gè)時(shí)候就要實(shí)現(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;
    }
}

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

不過最后還是有所遺漏,因?yàn)槲覀兊姆植际巾?xiàng)目中用到了很多http的內(nèi)部調(diào)用,用不上cookie,也沒有l(wèi)anguage參數(shù)。

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

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

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

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

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

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

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

于是我合理的猜想框架里不是通過攔截器設(shè)置一個(gè)locale,而是每次調(diào)用LocaleContextHolder.getLocale()都會(huì)執(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", "測(cè)試");
		request.setAttribute("language", "en");
		result += MessageUtils.get("test", "測(cè)試");
        return result;
    }

messages_ch.properties

test=測(cè)試

messages_en.properties

test=test

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

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

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

	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;
		}
	}

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

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

相關(guān)文章

  • Spring實(shí)戰(zhàn)之注入嵌套Bean操作示例

    Spring實(shí)戰(zhàn)之注入嵌套Bean操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之注入嵌套Bean操作,結(jié)合實(shí)例形式分析了嵌套Bean相關(guān)配置與使用操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java 中的CharArrayReader 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java 中的CharArrayReader 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    CharArrayReader 是字符數(shù)組輸入流。它和ByteArrayInputStream類似,只不過ByteArrayInputStream是字節(jié)數(shù)組輸入流,而CharArray是字符數(shù)組輸入流。CharArrayReader 是用于讀取字符數(shù)組,它繼承于Reader
    2017-05-05
  • IDEA報(bào)java:?java.lang.OutOfMemoryError:?Java?heap?space錯(cuò)誤解決辦法

    IDEA報(bào)java:?java.lang.OutOfMemoryError:?Java?heap?space錯(cuò)誤

    這篇文章主要給大家介紹了關(guān)于IDEA報(bào)java:?java.lang.OutOfMemoryError:?Java?heap?space錯(cuò)誤的解決辦法,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • intellij idea快速查看當(dāng)前類中的所有方法(推薦)

    intellij idea快速查看當(dāng)前類中的所有方法(推薦)

    這篇文章主要介紹了intellij idea快速查看當(dāng)前類中的所有方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot實(shí)現(xiàn)反向代理的示例代碼

    SpringBoot實(shí)現(xiàn)反向代理的示例代碼

    本文主要介紹了SpringBoot實(shí)現(xiàn)反向代理的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 淺談Java絕對(duì)布局

    淺談Java絕對(duì)布局

    這篇文章主要介紹了Java當(dāng)中的絕對(duì)布局,還舉了一個(gè)簡(jiǎn)單的實(shí)例,需要的朋友可以參考下。
    2017-08-08
  • SpringCloud實(shí)現(xiàn)Redis在各個(gè)微服務(wù)的Session共享問題

    SpringCloud實(shí)現(xiàn)Redis在各個(gè)微服務(wù)的Session共享問題

    Redis是運(yùn)行在內(nèi)存中,查取速度很快。本文重點(diǎn)給大家介紹SpringCloud實(shí)現(xiàn)Redis在各個(gè)微服務(wù)的Session共享,感興趣的朋友一起看看吧
    2018-08-08
  • 新手初學(xué)Java集合框架

    新手初學(xué)Java集合框架

    這篇文章主要介紹了JAVA集合框架的相關(guān)知識(shí),文中講解非常細(xì)致,幫助大家更好的理解學(xué)習(xí)JAVA框架,感興趣的朋友快來了解下,希望能給你帶來幫助
    2021-07-07
  • 通過Java設(shè)置Word頁(yè)面背景色過程詳解

    通過Java設(shè)置Word頁(yè)面背景色過程詳解

    這篇文章主要介紹了通過Java設(shè)置Word頁(yè)面背景色過程詳解,Word中可以針對(duì)不同文檔排版設(shè)計(jì)要求來設(shè)置背景設(shè)置顏色。常見的可設(shè)置單一顏色、漸變色或加載圖片來設(shè)置成背景。下面通過Java來設(shè)置以上3種Word頁(yè)面背景色,需要的朋友可以參考下
    2019-07-07
  • SpringBoot bean依賴屬性配置詳細(xì)介紹

    SpringBoot bean依賴屬性配置詳細(xì)介紹

    Spring容器是Spring的核心,一切SpringBean都存儲(chǔ)在Spring容器內(nèi)。可以說bean是spring核心中的核心。Bean配置信息定義了Bean的實(shí)現(xiàn)及依賴關(guān)系,這篇文章主要介紹了SpringBoot bean依賴屬性配置
    2022-09-09

最新評(píng)論