1 Maven依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.7</version>
</dependency>
2 Spring Boot配置
spring:
messages:
basename: i18n.message
3 I18nLocaleResolver
国际化区域解析器
package com.i18n;
import cn.hutool.core.util.StrUtil;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
/**
* 国际化区域解析器
*/
public class I18nLocaleResolver implements LocaleResolver {
/**
* 解析请求
* @param request
* @return
*/
@Override
public Locale resolveLocale(HttpServletRequest request) {
Locale locale = request.getLocale();
String language = request.getHeader("language-header");
if (!StrUtil.isEmpty(language)) {
String[] split = language.split("_");
locale = new Locale(split[0], split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
4 I18nConfig
国际化配置。
package com.config;
import com.i18n.I18nLocaleResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
/**
* 国际化配置
*/
@Configuration
public class I18nConfig {
@Bean
public LocaleResolver localeResolver(){
return new I18nLocaleResolver();
}
}
5 国际化配置文件
5.1 message.properties
不指定语言时,默认指定的国际化配置文件。
你好
5.2 message_en_US.properties
语言为英文时,使用的配置文件。
你好=hi
5.3 message_zh_CN.properties
语言为中文时,使用的配置文件。
你好=你好
6 调试代码
package com.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class I18NController {
@Autowired
private MessageSource messageSource;
@GetMapping("/hi")
public String hi() {
return messageSource.getMessage("你好", new Object[]{}, "", LocaleContextHolder.getLocale());
}
}