12 Haziran 2019 Çarşamba

SpringContext Internationalization ResourceBundleMessageSource Sınıfı - Locale'i Belirtmek Gerekir

Giriş
Bu sınıf org.springframework.context.MessageSource arayüzünü gerçekleştirir ve 

messages_en.properties, 
messages_kn.properties, 
messages_fr.properties 
gibi dosyaları okur

Bu sınıfı kullanırken Locale nesnesini belirtmek gerekir.

getMessage metodu - key + parameters + Locale
Açıklaması şöyle
The getMessage() takes the property name as the first parameter. The second parameter is null, because the messsage takes no parameters. The third parameter is the locale.
Örnek
Şöyle yaparız
@Component public class ApplicationConfiguration { @Autowired ResourceBundleMessageSource messageSource; @PostConstruct public void init(){ String welcome = messageSource.getMessage("welcome", null, Locale.FRANCE)); } }
Örnek
İngilizce labels.properties şöyle olsun
l1=Earth
l2=Hello {0}, how are you?
Almanca labels.properties şöyle olsun
l1=Erde
l2=Hallo {0}, wie geht's?
Şöyle yaparız
logger.info("{}", messageSource.getMessage("l2", new Object[] {"Paul Smith"},
  Locale.GERMAN));
logger.info("{}", messageSource.getMessage("l2", new Object[] {"Paul Smith"},
  Locale.ENGLISH));
Çıktı olarak şunu alırız
22:08:27.984 INFO  com.zetcode.Application - Hallo Paul Smith, wie gehts?
22:08:27.984 INFO  com.zetcode.Application - Hello Paul Smith, how are you?
Örnek
Şöyle yaparız.
for (Object object : bindingResult.getAllErrors()) {
  if(object instanceof FieldError) {
    FieldError fieldError = (FieldError) object;

    // Use null for second parameter if you do not use i18n
    String message = messageSource.getMessage(fieldError, null);
  }
}
setBasename metodu
Örnek
Elimizde şöyle bir application.properties olsun
# Whether to always apply the MessageFormat rules, parsing even messages without arguments.
spring.messages.always-use-message-format=false
 
# Whether to fall back to the system default Locale, if no files for a specific Locale have
# been found.
spring.messages.fallback-to-system-locale=true
 
# Whether to use the message code as the default message instead of throwing a
#"NoSuchMessageException". Recommended during development only.
spring.messages.use-code-as-default-message=false
Şöyle yaparız
@Bean
public ResourceBundleMessageSource messageSource() {
  ResourceBundleMessageSource source = new ResourceBundleMessageSource();
  source.setDefaultEncoding("UTF-8");
  source.setBasename("messages");
  source.setCacheSeconds(600);
  return source;
}
Örnek
Şöyle yaparız.
@Bean
public ResourceBundleMessageSource messageSource() {
  ResourceBundleMessageSource resource = new ResourceBundleMessageSource();
  resource.setBasename("message");
  return resource;
}
Örnek
XML ile şöyle yaparız.
<bean id="messageSource"
  class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basenames" value="ValidationMessages"/>
</bean>

Hiç yorum yok:

Yorum Gönder