Springboot前后端分离国际化实现-chatgpt

前言

要实现Springboot国际化应用,主要有三个步骤。

1、设置国际化属性文件


message.properties文件内容可为空。

message.en_US.properties内容示例:

40001=Hello

message.zh_CN.properties内容示例:

40001=你好

2.创建解析器和拦截器

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;import java.util.Locale;@Configuration
public class LocaleConfig {@Beanpublic SessionLocaleResolver localeResolver() {SessionLocaleResolver localeResolver = new SessionLocaleResolver();localeResolver.setDefaultLocale(Locale.CHINA);return localeResolver;}@Beanpublic WebMvcConfigurer localeInterceptor() {return new WebMvcConfigurer() {@Overridepublic void addInterceptors(InterceptorRegistry registry) {LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();localeInterceptor.setParamName("lang");registry.addInterceptor(localeInterceptor);}};}
}

@Slf4j
@Component
public class GlobalI18nFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//String language = exchange.getRequest().getHeaders().getFirst("content-language");String language = exchange.getRequest().getQueryParams().getFirst("lang");Locale locale = Locale.getDefault();if (language != null && language.length() > 0) {String[] split = language.split("_");locale = new Locale(split[0], split[1]);}LocaleContextHolder.setLocaleContext(new SimpleLocaleContext(locale), true);return chain.filter(exchange);}@Overridepublic int getOrder() {return Ordered.HIGHEST_PRECEDENCE;}
}

3.启动配置文件设置

application.properties中添加如下内容

#i18n
spring.messages.basename=i18n.messages
spring.messages.cache-duration=3600
spring.messages.encoding=UTF-8

application.yml中添加如下内容

spring: messages:basename: i18n/messages

4、控制器示例

import java.util.HashMap;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/test")
public class TestControler {@Autowiredprivate MessageSource messageSource;@GetMapping("/hello")public Map<Object, Object> test() {Map<Object, Object> result = new HashMap<Object, Object>();result.put("code", 40001);result.put("msg", messageSource.getMessage("40001", null, LocaleContextHolder.getLocale()));return result;}}

5、小结

Springboot国际化可以帮助使用者在不同语言环境中构建应用程序,这样应用程序可以有效地适应不同语言文化背景下的用户需求。
此外,Springboot国际化也可以方便多语言应用程序重用和维护,从而减少了系统部署的时间成本和维护的费用。要实现Springboot国际化应用,主要有三个步骤。

通过以上步骤可以实现Springboot国际化应用,为用户在不同语言文化环境中提供更便捷、高效的应用体验。

给时光以生命,给岁月以文明。

本文链接:https://my.lmcjl.com/post/6095.html

展开阅读全文

4 评论

留下您的评论.