How to handle multiple files and messages for internationalization in Spring?

Some Spring internationalization articles talk about how to exchange messages that convey a locale, etc. , but I only found use cases containing multiple messages ..

  • How can I organize and use internationalization files for each context? (checking, viewing messages, default messages, business messages)

  • I know that Spring uses a template (message file name) + locales. for example: message_zh_CN . How can I have files in context knowing about this behavior?

I think it should be:

resources `-- messages |-- validation | |-- message_locale.properties | `-- message_locale2.properties |-- business | |-- message_locale.properties | `-- message_locale2.properties `-- view |-- message_locale.properties `-- message_locale2.properties 

OR

 resources `-- messages |-- validation | |-- validation_locale.properties | `-- validation_locale2.properties |-- business | |-- business_locale.properties | `-- business_locale2.properties `-- view |-- view_locale.properties `-- view_locale2.properties 
+5
source share
1 answer

You can define a global MessageSource for all of these message files. This approach is practical using the setBasenames method:

 @Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasenames("classpath:/messages/business/message", "classpath:/messages/validation/message", "classpath:/messages/view/message"); return messageSource; } 

This approach makes sense if your message keys are unique in all files, for example. The business-12 key only exits business related message sources. Otherwise, it is better to define one MessageSource for each context and enter them according to your context:

 @Bean public MessageSource businessMessageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:/messages/business/message"); return messageSource; } @Bean public MessageSource validationMessageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:/messages/validation/message"); return messageSource; } @Bean public MessageSource viewMessageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:/messages/view/message"); return messageSource; } 
+8
source

Source: https://habr.com/ru/post/1258568/


All Articles