软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot消息国际化配置实现过程解析

SpringBoot消息国际化配置实现过程解析

作者:与李  发布时间:2023-05-16 01:19:22 

标签:Spring,Boot,消息,国际化,配置

一、目的

针对不同地区,设置不同的语言信息。

SpringBoot国际化配置文件默认放在classpath:message.properties,如果自定义消息配置文件,需要application.properties或application.yml中设置spring.messages.basename的值。

二、步骤

在src/main/resources 下建i18n文件夹

在i18n文件夹中建立messages.properties 找不到语言配置时,使用此文件

hello=你好_默认

在i18n文件夹中建立messages_en_US.properties 英文语言配置

hello=hello_English

在i18n文件夹中建立messages_zh_CN.properties 中文语言配置

hello=你好_中文

MessageConfig.java

对消息的配置


package com.spring.security.config.spring;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.i18n.LocaleContext;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.util.Assert;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.AbstractLocaleContextResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

@Configuration
public class MessageConfig extends AbstractLocaleContextResolver{

@Value("${spring.messages.basename}")
public String[] basenames;

@Bean(name = "messageSource")
public ResourceBundleMessageSource resourceBundleMessageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
if (basenames != null) {
for (int i = 0; i < basenames.length; i++) {
String basename = basenames[i];
Assert.hasText(basename, "Basename must not be empty");
this.basenames[i] = basename.trim();
}
source.setBasenames(basenames);
} else {
this.basenames = new String[0];
source.setBasename(basenames[0]);
}
source.setDefaultEncoding("UTF-8");
source.setUseCodeAsDefaultMessage(true);
return source;
}

@Bean
 public LocaleResolver localeResolver() {
   SessionLocaleResolver slr = new SessionLocaleResolver();
   slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
   return slr;
 }

/**
  * 国际化,设置url识别参数
  *
  * @return
  */
 @Bean
 public LocaleChangeInterceptor localeChangeInterceptor() {
   LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
   lci.setParamName("lang");
   return lci;
 }

@Override
public LocaleContext resolveLocaleContext(HttpServletRequest request) {
return null;
}

@Override
public void setLocaleContext(HttpServletRequest request, HttpServletResponse response,
LocaleContext localeContext) {
}
}

SpringUtils.java

Spring工具类,用于获取ApplicationContext


package com.spring.security.common.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;

/**
* Spring容器
*/
@Service
public class SpringUtils implements ApplicationContextAware {

private static ApplicationContext context = null;

@Override
 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
   if (context == null) {
     context = applicationContext;
   }
 }

/**
  * 获取容器
  *
  * @return 容器
  */
 public static ApplicationContext getContext() {
   return context;
 }
}

MessageUtils.java

封装获取message的工具类


package com.spring.security.common.utils;

import java.util.Locale;

import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;

public class MessageUtils {

public static String getMessage(String code) {
Locale locale = LocaleContextHolder.getLocale();
ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
  String message = reloadableResourceBundleMessageSource.getMessage(code, null, locale);
  return message;
}
}

** WebMvcConfig.java**

mvc配置,解决跨域,接口中文乱码,添加语言 *


package com.spring.security.config.spring;

import java.nio.charset.Charset;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

@Autowired
private LocaleChangeInterceptor localeChangeInterceptor;

/**
* 解决跨域
*/
@Override
protected void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOrigins("*")
.allowCredentials(true);
}

/**
* 配置消息转换器
* 解决返回String乱码
*/
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(responseBodyConverter());
}

@Bean
 public HttpMessageConverter<String> responseBodyConverter() {
   return new StringHttpMessageConverter(Charset.forName("UTF-8"));
 }

@Override
protected void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
registry.addInterceptor(localeChangeInterceptor);
}

}

三、测试

测试接口:


package com.spring.security.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.spring.security.common.utils.I18nUtils;

@RestController
public class TestController {

@GetMapping("/test")
public String doTest() {
return I18nUtils.getMessage("hello");
}
}

SpringBoot消息国际化配置实现过程解析

SpringBoot消息国际化配置实现过程解析

来源:https://www.cnblogs.com/yl-space/p/13383994.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com