springboot国际化
背景
在互联网下,不同的国家语言不同,所以网站也提供了.不同语言的版本,这就是国际化
效果
- 中文
- 英文
配置
-
在resources下创建i18n文件夹,并创建文件
-
language.properties 默认语言
language.title=清欢渡个人博客小站 language.login=登录 language.logout=退出 language.admin=后台管理
-
language_en_US.properties 英文
language.title=bo.huang_personal_blog language.login=login language.logout=logout language.admin=system-admin
-
language_zh_CN.properties 中文
language.title=清欢渡个人博客小站 language.login=登录 language.logout=退出 language.admin=后台管理
-
-
自定义LocaleResolver类(方便切换语言)
默认没有参数,从请求头中获取,也可以通过参数lg指定语言(xxxx?lg=en-US)
package com.hb.study.springboot.config; import lombok.extern.java.Log; import org.springframework.web.servlet.LocaleResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; /** * @author bo.huang * @since 2020/5/20 1:43 下午 */ @Log public class LocaleResolverConfig implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { log.fine("=============语言"); //获取语言参数 String lg = request.getParameter("lg"); if (lg == null || lg.length() <= 0) { lg = getHeadLg(request); } String[] split = lg.split("-"); return new Locale(split[0], split[1]); } /** * 获取请求头中的语言头 * * @param request request * @return java.lang.String * @author bo.huang update * @date 2020/5/20 1:47 下午 */ private String getHeadLg(HttpServletRequest request) { String header = request.getHeader("Accept-Language"); if (header == null || header.length() <= 0) { return "zh-CN"; } return header.split(",")[0]; } @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { } }
-
配置类(把自定义LocaleResolver类,交给spring容器管理)
package com.hb.study.springboot.config; import lombok.extern.java.Log; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; /** * @author bo.huang * @since 2020/5/20 2:23 下午 */ @Configuration @Log public class BeanConfig { @Bean("localeResolver") public LocaleResolver getLocaleResolver() { log.info("===========实例化LocaleResolver"); return new LocaleResolverConfig(); } }
注意:一定要@Bean 添加默认名称localeResolver,否则可以会获取不到
-
最后在配置文件配置
spring: messages: basename: i18n/language
这样就完成了配置,可以运行容器了,但是有一个问题,这个不适用于前后端分离项目,前后端分离项目需要从新设计