2026/2/22 23:12:19
网站建设
项目流程
遵义建站平台哪家好,企业网络建站,域名查询是什么意思,域名类型在 Spring Boot 项目已经开发完成后#xff0c;想要实现国际化#xff08;i18n#xff09;#xff0c;让所有提示信息#xff08;后端返回的错误消息、成功消息、异常信息、枚举描述等#xff09;支持多语言#xff0c;处理流程如下#xff1a;
1. 创建国际化资源文件想要实现国际化i18n让所有提示信息后端返回的错误消息、成功消息、异常信息、枚举描述等支持多语言处理流程如下1. 创建国际化资源文件messages.properties在 src/main/resources 目录下新建 i18n 子目录创建以下文件1src/main/resources/2└── i18n/3├── messages.properties # 默认语言通常是中文或英文4├── messages_zh_CN.properties # 简体中文5├── messages_en_US.properties # 美式英文6├── messages_zh_TW.properties # 繁体中文可选7└── messages_ja.properties # 日语可选messages.properties中文示例1# 通用提示2success操作成功3error.system系统异常请稍后重试4error.notfound资源不存在56# 业务提示7user.login.success登录成功8user.login.fail用户名或密码错误9user.notfound用户不存在messages_en_US.properties英文示例1successOperation successful2error.systemSystem error, pleasetryagain later3error.notfoundResource not found45user.login.successLogin successful6user.login.failUsername or password is incorrect7user.notfoundUser not found注意文件名必须以 messages 开头Spring Boot 默认查找规则。所有提示统一放在 i18n 目录下方便管理。2. 配置 application.yml或 application.properties1# application.yml2spring:3messages:4basename: i18n/messages # 资源文件基础名支持通配符5encoding: UTF-8 # 必须是 UTF-86fallback-to-system-locale:false# 推荐设置为false找不到对应语言时不回退到系统默认Locale7use-code-as-default-message:true# 找不到key时直接返回code调试方便上线可改为false1# properties2spring.messages.basenamei18n/messages3spring.messages.encodingUTF-84spring.messages.fallback-to-system-localefalse5spring.messages.use-code-as-default-messagetrue3. 自定义 LocaleResolver 和 LocaleChangeInterceptor支持前端传参切换语言Spring Boot 默认使用AcceptHeaderLocaleResolver根据请求头 Accept-Language 自动识别生产环境通常还需要支持通过参数或 cookie 切换语言。使用 SessionLocaleResolver LocaleChangeInterceptor1Configuration2publicclassLocaleConfigimplementsWebMvcConfigurer {34//默认语言5Bean6publicLocaleResolver localeResolver() {7SessionLocaleResolver localeResolver newSessionLocaleResolver();8localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);//默认简体中文9returnlocaleResolver;10}1112//拦截器支持 ?langzh_CN 或 ?langen_US 切换语言13Bean14publicLocaleChangeInterceptor localeChangeInterceptor() {15LocaleChangeInterceptor lci newLocaleChangeInterceptor();16lci.setParamName(lang);//前端传参名17returnlci;18}1920Override21publicvoidaddInterceptors(InterceptorRegistry registry) {22registry.addInterceptor(localeChangeInterceptor());23}24}若优先从请求头识别再支持参数切换可以自定义 LocaleResolver更灵活。4. 在代码中使用 MessageSource 获取国际化消息方式一注入 MessageSource1RestController2RequestMapping(/api)3publicclassUserController {45Autowired6privateMessageSource messageSource;78GetMapping(/test)9publicResponseEntityString test(Locale locale) {//Locale 可选从参数注入10//方式1直接使用 locale 参数11String msg messageSource.getMessage(user.login.success,null, locale);1213//方式2从 LocaleContextHolder 获取当前语言推荐14String msg2 messageSource.getMessage(user.login.success,null, LocaleContextHolder.getLocale());1516returnResponseEntity.ok(msg2);17}18}方式二统一封装工具类1Component2publicclassMessageUtils {34privatestaticMessageSource messageSource;56Autowired7publicvoidsetMessageSource(MessageSource messageSource) {8MessageUtils.messageSource messageSource;9}1011/**12* 获取国际化消息13*/14publicstaticString getMessage(String code, Object... args) {15returnmessageSource.getMessage(code, args, LocaleContextHolder.getLocale());16}1718publicstaticString getMessage(String code) {19returngetMessage(code, (Object)null);20}21}使用方式1thrownewBusinessException(MessageUtils.getMessage(user.notfound));2//或3returnResult.error(MessageUtils.getMessage(error.system));5. 全局异常处理中使用国际化1RestControllerAdvice2publicclassGlobalExceptionHandler {34ExceptionHandler(BusinessException.class)5publicResult?handleBusinessException(BusinessException e) {6//假设 BusinessException 里面存了 messageCode7String message MessageUtils.getMessage(e.getCode(), e.getArgs());8returnResult.error(message);9}1011ExceptionHandler(Exception.class)12publicResult?handleException(Exception e) {13returnResult.error(MessageUtils.getMessage(error.system));14}15}6. 支持参数占位符1# messages.properties2user.age.limit年龄必须在 {0} 到 {1} 岁之间1String msg MessageUtils.getMessage(user.age.limit, 18, 60);2//输出年龄必须在 18 到 60 岁之间7. 常见最佳实践总结处理点处理方式资源文件位置/* by 01022.hk - online tools website : 01022.hk/zh/reproduce.html */ src/main/resources/i18n/messages_*.properties默认语言简体中文/* by 01022.hk - online tools website : 01022.hk/zh/reproduce.html */ Locale.SIMPLIFIED_CHINESE语言切换方式请求头Accept-Language?langzh_CN消息获取方式优先使用LocaleContextHolder.getLocale()工具类封装MessageUtils统一获取异常消息全部使用 code MessageUtils 获取找不到key建议use-code-as-default-messagefalse编码必须UTF-88. 测试方法浏览器开发者工具 → Network → 修改请求头 Accept-Language: en-US,en;q0.9或直接在 URL 后加 ?langen_US完成以上步骤你的 Spring Boot 项目就实现了标准的国际化支持所有提示信息都可以根据用户语言自动切换。