화면으로 Message를 전달해야 하는 경우가 있을 것이다.
Message를 처리하는 몇가지 방법을 나열해보겠다.
사용자의 언어 선택에 맞게 페이지가 번역되어 보여야 한다면 어떻게 할 것인가?
언어별로 화면을 개발할 것인가? 이것은 매우 비효율 적이고 유지보수가 어려워진다.
Message 템플릿을 정한 후 다국어 처리된 파일을 작성하면 Srping이 알아서 텍스트를 다국어 처리해준다.
Message Property 파일 작성
Property파일은 {basename}_언어코드_국가코드.properties Naming Rule을 지켜야 한다.
basename은 Configuration파일에 정의한다.
{basename].properties | Default Message로 시스템의 언어 및 지역에 맞는 Property 파일이 존재하지 않을 경우 사용 |
{basename]_en.properties | 시스템 언어 코드가 영어일 때 사용 |
{basename}_ko.properties | 시스템 언어 코드가 한글일 때 사용 |
{basename}_en_UK.properties | 시스템 언어 코드가 영어일때 영국(국가코드)를 위한 메시지 |
#Message_ko_KR.properties
DEFAULT=관리자에게 문의 하세요.
ERROR001=에러입니다.
ERROR002={0}은 {1}입니다.
Naming Rule에 따라서 properties파일의 내용을 각 언어에 맞게 정의하여 사용하면 된다.
property 설정을 통해 Reloading 정보를 입력해 주기적인 Message Reloading을 수행한다.
Application 종료 없이도 실행 도중에 변경이 가능한 장점이 있다.
@Configuration
public class MessageConfiguration {
@Bean
public MessageSource messageSource() throws IOException {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:/messages/message");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public MessageSourceAccessor messageSourceAccessor() throws IOException {
return new MessageSourceAccessor(messageSource());
}
}
basenames | 메세지 Property파일의 위치와 이름을 지정 |
defaultEncoding | 기본 인코딩 방법 |
defaultLocale | 기본 Location |
cacheSeconds | Reload Cache 설정 |
useCodeAsDefaultMessage | true : system locale 사용 false : {basename}.properties 파일 사용 |
String [] messageParam = {"Dev Log","Best"};
System.out.println(messageSourceAccessor.getMessage("ERROR001", Locale.KOREA));
System.out.println(messageSourceAccessor.getMessage("ERROR002", messageParam, Locale.KOREA));
System.out.println(messageSourceAccessor.getMessage("ERROR003", messageSourceAccessor.getMessage("DEFAULT", Locale.KOREA), Locale.KOREA));
Configuration 단계에서 DefaultLocale을 설정하였다면 뒤에 Locale부분을 생략하여도 된다.
String 배열을 함께 넘겨주면 해당 인덱스의 값으로 변환하여준다.
코드를 넘겼는데 정의되어있지 않은 경우가 존재할 수 있다. 정의되어있지 않은 코드라면 Default 값을 정의해주면 된다.
에러입니다.
Dev Log은 Best입니다.
관리자에게 문의 하세요.
@Transactional 기초 및 주의사항 (8) | 2023.05.06 |
---|---|
크롤링 - 셀레니움(Selenium)/ChromeOptions/WebDriverWait (1) | 2022.09.28 |
REST API 개념 (0) | 2022.07.13 |
annotation-driven / component-scan / annotation-config 차이 정리 (1) | 2022.03.28 |
[Spring] ApplicationContext / WebApplicationContext 개념 (0) | 2022.03.21 |
댓글 영역