0


SpringBoot集成国际化多语言配置

一、开发背景

在当今全球化的环境下,为了更好地满足用户的多语言需求,越来越多的应用程序需要支持国际化多语言配置。Spring Boot作为一种快速开发框架,提供了方便的国际化支持,使得应用程序可以轻松地适应不同的语言环境。通过集成Spring Boot的国际化多语言配置,应用程序可以根据用户的语言环境自动选择相应的语言资源,从而实现更好的用户体验。这种配置方式不仅可以适应不同语言环境,还可以为应用程序提供更好的扩展性和可维护性,是现代应用程序开发的必备技能之一。

二、多语言转换工具类

1、LocaleMessageUtil(根据语言编码查询内容)

importorg.apache.commons.lang3.StringUtils;importorg.springframework.context.MessageSource;importorg.springframework.context.i18n.LocaleContextHolder;importorg.springframework.stereotype.Component;importjavax.annotation.Resource;@ComponentpublicclassLocaleMessageUtil{@ResourceprivateMessageSource messageSource;publicLocaleMessageUtil(){}publicStringgetMessage(String code){returnthis.getConnectorMessage(code,null,null);}publicStringgetMessage(String code,String param){returnthis.getConnectorMessage(code, param,null);}publicStringgetMessage(String[] codes){returnthis.getConnectorMessage(null,null, codes);}privateStringgetConnectorMessage(String code,String param,String[] codes){StringBuilder stringBuilder =newStringBuilder();if(StringUtils.isNotEmpty(param)){
            stringBuilder.append(param).append(":");}elseif(StringUtils.isNotEmpty(code)){
            stringBuilder.append(this.messageSource.getMessage(code,null,LocaleContextHolder.getLocale()));}if(null!= codes){for(String arr : codes){
                stringBuilder.append(this.messageSource.getMessage(arr,null,LocaleContextHolder.getLocale())).append(";");}}return stringBuilder.toString();}}

2、MessageLocaleResolver(国际化解析)

根据请求头中携带的请求语言内容,生成会话,解析内容。

importorg.apache.commons.lang3.StringUtils;importorg.springframework.web.servlet.LocaleResolver;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importjava.util.Locale;/**
 * 国际化解析
 */publicclassMessageLocaleResolverimplementsLocaleResolver{privatestaticfinalStringLANG="lang";privatestaticfinalStringLANG_SESSION="lang_session";@OverridepublicLocaleresolveLocale(HttpServletRequest request){Locale locale;String language = request.getHeader(LANG);//中文language=zh_CNif(StringUtils.isNotEmpty(language)){
            locale =newLocale(language.toLowerCase());}else{
            locale =newLocale("zh_cn");}HttpSession session = request.getSession();
        session.setAttribute(LANG_SESSION, locale);return locale;}@OverridepublicvoidsetLocale(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Locale locale){}}

三、Spring Web Servlet注入多语言插件转换Bean

WebMvcConfig

importcom.zfsw.mall.common.utils.lang.MessageLocaleResolver;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.LocaleResolver;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;@ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer{@BeanpublicLocaleResolverlocaleResolver(){returnnewMessageLocaleResolver();}}

四、配置文件修改

application.yml

spring:
    messages:
        basename: i18n.messages
        encoding: utf-8

五、多语言翻译配置

1、resource目录下,新建i18n目录

使用idea右键在i18n目录下,新建四个配置文件,分别为

  • messages.properties:默认语言记录,请求头中不传“lang”取值
  • messages_en_us.properties:英文翻译
  • messages_zh_cn.properties:中文简体翻译
  • messages_zh_hant.properties:中文繁体翻译

如图:

在这里插入图片描述

当然了,如果以后需要其他语言,也可以继续添加,比如韩语、日语、法语等。

2、配置文件内容

配置文件的内容可以理解为一个key-value数据类型,key是自己系统内定语言编码,在解析器工具类中使用,value是翻译后的内容。如果想翻译几个就在几个配置文件里加。例如:

  • messages.properties
weather.is.nice=今天天气不错
  • messages_en_us.properties
weather.is.nice=The weather is nice today
  • messages_zh_cn.properties
weather.is.nice=今天天气不错
  • messages_zh_hant.properties
weather.is.nice=今天天氣不錯

六、测试效果

写一个控制器,验证一下

TestLangController

importcom.zfsw.mall.common.utils.lang.LocaleMessageUtil;importio.swagger.annotations.ApiOperation;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjavax.annotation.Resource;@RestController@RequestMapping("/api/user")@ApiOperation(value ="多语言测试")publicclassTestLangController{@ResourceprivateLocaleMessageUtil messageUtil;@GetMapping("/lang/test")@ApiOperation(value ="多语言测试")publicResponseEntity<String>langTest(){//语言编码String langCode ="weather.is.nice";//翻译内容String message = messageUtil.getMessage(langCode);returnResponseEntity.ok().body(message);}}

启动项目,试一下

  1. 请求头不加lang参数在这里插入图片描述
  2. 英文翻译在这里插入图片描述
  3. 中文简体翻译在这里插入图片描述
  4. 中文繁体翻译在这里插入图片描述

七、前端

前端增加切换语言按钮,中英文切换后,请求头发生变动即可!

config.headers["lang"] = store.getters.local || "zh-hant";
标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/qq_43090226/article/details/131657945
版权归原作者 18岁程序员想打职业 所有, 如有侵权,请联系我们删除。

“SpringBoot集成国际化多语言配置”的评论:

还没有评论