springboot 国际化集成

第一步加仓资源MessageSource ,启动类中加上如下代码:

public WebsiteApplication(MessageSource messageSource) {
MsgUtil.inti(messageSource);
}
第二步配置拦截器信息
package com.test.config;

import com.test.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

import java.util.Locale;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {



@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}


@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor()).addPathPatterns("/**");
}
/**
* 这个如果不存在,则会抛异常: nested exception is java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy
*
* @return
*/
@Bean
public LocaleResolver localeResolver() {
// 也可以换成 SessionLocalResolver, 区别在于国际化的应用范围
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
return localeResolver;
}

/**
* 根据请求参数,来设置本地化
*
* @return
*/
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
// Defaults to "locale" if not set
localeChangeInterceptor.setParamName("language");
return localeChangeInterceptor;
}
第三步:简单的封装工具
package com.test.utils;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;

public class MsgUtil {
private static MessageSource messageSource;

public static void inti(MessageSource messageSource) {
MsgUtil.messageSource = messageSource;
}

/**
* 获取单个国际化翻译值
*/
public static String get(String msgKey) {
try {
return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
} catch (Exception e) {
return msgKey;
}
}
}
第四步:resources下面建立文件夹i18n/messages

对应的信息如简体中文messages_zh_CN.properties ,根据自己的需求添加
name=用户名

对应的信息如简体英文messages_en_US.properties
name=user name

第五步springboot配置文件中加上即可
spring.messages.basename=i18n/messages/messages
spring.messages.encoding=UTF-8
spring.messages.fallbackToSystemLocale=false

第六步测试即可
@GetMapping(path = "test")
public ResultBean testLocal(String language) {
String[] s = language.split("_");
LocaleContextHolder.setLocale(new Locale(s[0], s[1]));
System.out.println(MsgUtil.get("name"));
return ResultBean.ok();
}








}
posted @ 2021-06-03 14:08  zysnba  阅读(135)  评论(0)    收藏  举报