欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > SpringMVC的国际化

SpringMVC的国际化

2025/3/10 16:07:29 来源:https://blog.csdn.net/pig_Struggle/article/details/146072695  浏览:    关键词:SpringMVC的国际化

SpringMVC的国际化

WebMVC的核心LocaleResolver,MessageSource。

WebMvcAutoConfiguration 是SpringBoot中的 Web方面的自动配置类。
在MVC的配置类里面,如果没有自定义的LocaleResolver,那么就会使用默认的。并且自定义的名称是“localeResolver”,才不会加载默认的。

默认使用的是AcceptHeaderLocaleResolver,这个类会从请求头里面获取Locale,如果没有,就使用默认的。


@Override
@Bean
@ConditionalOnMissingBean(name = DispatcherServlet.LOCALE_RESOLVER_BEAN_NAME)
public LocaleResolver localeResolver() {if (this.webProperties.getLocaleResolver() == WebProperties.LocaleResolver.FIXED) {return new FixedLocaleResolver(this.webProperties.getLocale());}AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();localeResolver.setDefaultLocale(this.webProperties.getLocale());return localeResolver;
}@ConfigurationProperties("spring.web")
public class WebProperties {private Locale locale;private LocaleResolver localeResolver = LocaleResolver.ACCEPT_HEADER;private final Resources resources = new Resources();
}
  1. 默认的LocaleResolver
    不需要更改,需要在请求头里面添加的Accept-Language属性。

  2. 自定义的LocaleResolver
    需要从自定义的报文里面获取对应属性,就需要自定义LocaleResolver,获取报文属性里面的特定字段。

自定义实现国际化

  1. 自定义的LocaleResolver、MessageSource、Validator添加国际化功能

@Configuration
public class LocaleWebMvcConfigurer implements WebMvcConfigurer {@Value("${spring.messages.basename:[]}")private String[] basename;@Beanpublic MessageSource messageSource() {ReloadableResourceBundleMessageSource messageSource =new ReloadableResourceBundleMessageSource();List<String> baseNames = new ArrayList<>();baseNames.add("classpath:i18n/validation/messages");Optional.ofNullable(basename).ifPresent(path -> {baseNames.addAll(Arrays.asList(path));});messageSource.setBasenames(baseNames.toArray(new String[0]));messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());return messageSource;}@Overridepublic Validator getValidator() {return validator();}@Beanpublic Validator validator() {LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();validator.setValidationMessageSource(messageSource());return validator;}@Beanpublic LocaleResolver localeResolver() {return new CustomLocaleResolver();}private static class CustomLocaleResolver implements LocaleResolver {@Overridepublic Locale resolveLocale(HttpServletRequest request) {String[] locales = Optional.ofNullable((String) FlowRuntimeContext.getTechProperty("LOCALE")).orElse(Locale.getDefault().toString()).split("_");return new Locale(locales[0], locales[1]);}@Overridepublic void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {}}
}
  1. 指定类路径下添加语言包message.properties,message_zh_CN.properties,message_en_US.properties,message_zh_TW.properties

  2. 使用MessageSource获取对应的message
    messageSource.getMessage(String code, @Nullable Object[] args, Locale locale);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com