项目架构是通过网关模块(基于SpringCloud gateway)路由到业务接口模块(基于SpringBoot),没有独立的鉴权服务,“登录接口”集成在网关模块本身。
使用的框架版本如下:
基本思路跟SpringBoot项目的i18n一样
gateway src main java resources i18n messages.properties messages_en_US.properties test
仅摘取跟i18n相关部分
spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages
I18nGlobalFilter.java
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import reactor.core.publisher.Mono; import java.util.Locale; /** * 国际化过滤器 * 根据浏览器请求头的里Content-Language实现国际化 * * @Description * @Author * @Date 2024/4/29 */ @Component public class I18nGlobalFilter implements WebFilter { @Override public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { Locale locale = Locale.getDefault(); // 默认Locale HttpHeaders headers = exchange.getRequest().getHeaders(); String language = headers.getFirst("Content-Language"); if (language != null) { locale = Locale.forLanguageTag(language); } // 将Locale存储在ServerWebExchange的属性中,供后续逻辑使用 exchange.getAttributes().put(Locale.class.getName(), locale); // spring gateway手动处理,基于LocaleContextHolder LocaleContextHolder.setLocale(locale); return chain.filter(exchange); } }
MessageUtils.java
import com.siemens.tbds.gateway.util.SpringUtils; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; /** * 获取i18n资源文件 * * @Description * @Author * @Date 2024/4/29 */ public class MessageUtils { /** * 根据消息键和参数 获取消息 委托给spring messageSource * * @param code 消息键 * @param args 参数 * @return 获取国际化翻译值 */ public static String message(String code, Object... args) { MessageSource messageSource = SpringUtils.getBean(MessageSource.class); return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); } }
调用示例代码(仅调用片段)
return ApiResponse.error(MessageUtils.message("api.auth.username-password.error"));
messages.properties示例
api.auth.username-password.error=用户名或密码错误!
messages_en_US.properties示例
api.auth.username-password.error=username or password error.
中文
英文
仅I18nConfig.java替换上面的I18nGlobalFilter.java即可,其余MessageUtils.java、i18n资源文件、application.yml中i18n配置均与上面保持一致即可。
I18nConfig.java
import cn.hutool.core.util.StrUtil; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; /** * 国际化配置 * * @author */ @Configuration public class I18nConfig { @Bean public LocaleResolver localeResolver() { return new I18nLocaleResolver(); } /** * 获取请求头国际化信息 */ static class I18nLocaleResolver implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest httpServletRequest) { String language = httpServletRequest.getHeader("content-language"); Locale locale = Locale.getDefault(); if (StrUtil.isNotBlank(language)) { String[] split = language.split("-"); locale = new Locale(split[0], split[1]); } return locale; } @Override public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { } } }
上一篇:逆魂界7.25怎么不出怪-逆魂界7.25版本怪物消失?玩家焦虑困惑求解
下一篇:免费分享一套微信小程序图书馆座位预约管理系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~