I18nAutoConfiguration.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package jnpf.i18n.config;
  2. import jnpf.config.ConfigValueUtil;
  3. import jnpf.i18n.constant.I18nApiConst;
  4. import jnpf.i18n.core.DynamicMessageSource;
  5. import jnpf.i18n.core.MyReloadableResourceBundleMessageSource;
  6. import jnpf.i18n.provider.*;
  7. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  8. import org.springframework.boot.autoconfigure.context.MessageSourceProperties;
  9. import org.springframework.context.MessageSource;
  10. import org.springframework.context.annotation.Bean;
  11. import org.springframework.context.annotation.Configuration;
  12. import org.springframework.context.annotation.Primary;
  13. import org.springframework.context.support.AbstractApplicationContext;
  14. import org.springframework.context.support.ReloadableResourceBundleMessageSource;
  15. import org.springframework.util.StringUtils;
  16. import java.time.Duration;
  17. import java.util.Collection;
  18. import java.util.List;
  19. /**
  20. * 国际化语言配置类
  21. */
  22. @Configuration(proxyBeanMethods = false)
  23. public class I18nAutoConfiguration {
  24. @Primary
  25. @Bean(AbstractApplicationContext.MESSAGE_SOURCE_BEAN_NAME)
  26. public MessageSource messageSource(MessageSourceProperties properties, List<MessageSourceProvider> messageSourceProviders, DynamicMessageSource dynamicMessageSource) {
  27. ReloadableResourceBundleMessageSource messageSource = new MyReloadableResourceBundleMessageSource(messageSourceProviders);
  28. Object basename = properties.getBasename();
  29. if (basename != null) {
  30. if(basename instanceof String) {
  31. if (!((String) basename).isEmpty()) {
  32. messageSource.setBasenames(StringUtils
  33. .commaDelimitedListToStringArray(StringUtils.trimAllWhitespace((String) basename)));
  34. }
  35. }else if(basename instanceof Collection){
  36. if(!((Collection<?>) basename).isEmpty()){
  37. messageSource.setBasenames(((Collection<?>) basename).toArray(new String[0]));
  38. }
  39. }
  40. }
  41. if (properties.getEncoding() != null) {
  42. messageSource.setDefaultEncoding(properties.getEncoding().name());
  43. }
  44. messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale());
  45. Duration cacheDuration = properties.getCacheDuration();
  46. if (cacheDuration != null) {
  47. messageSource.setCacheMillis(cacheDuration.toMillis());
  48. }
  49. messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());
  50. messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());
  51. dynamicMessageSource.setParentMessageSource(messageSource);
  52. return dynamicMessageSource;
  53. }
  54. @Bean
  55. @ConditionalOnMissingBean
  56. public DynamicMessageSource getDynamicMessageSource(I18nMessageProvider i18nMessageProvider){
  57. return new DynamicMessageSource(i18nMessageProvider);
  58. }
  59. @Bean
  60. @ConditionalOnMissingBean
  61. public DynamicMessageProvider getDynamicMessageProvider(){
  62. return new MyDynamicMessageProvider();
  63. }
  64. @Bean
  65. @ConditionalOnMissingBean
  66. public I18nMessageProvider getI18nMessageProvider(ConfigValueUtil configValueUtil, DynamicMessageProvider dynamicMessageProvider){
  67. return new MyI18nMessageProvider(configValueUtil, dynamicMessageProvider);
  68. }
  69. @Bean
  70. public I18nApiConst getI18nApiConst(ConfigValueUtil configValueUtil){
  71. return new I18nApiConst(configValueUtil.getApiDomain());
  72. }
  73. }