티스토리 뷰

이번장에는 Spring에서 제공해주는 MessageSource에 대해 알아보자.
웹개발을 하면서 화면단에 alert함수를 이용해 클라이언트에게 특정메세지를 보여줘야 할때가 많다.
이때 java에서 메세지값을 하드코딩으로 넣고 리턴해주는 경우도 있는데 그렇게 하게되면 하나의 메세지내용을 수정할 때 그 메세지가 입력된 모든파일을 다 찾아가면서 바꿔줘야 한다. 이때 이러한 문제를 해결해주기 위해 MessageSource라는걸 제공해주는데 이 MessageSoure의 기능중 하나인 다국어 지원도 해준다. 예제코드를 통해 알아보자.

MessageSourceAccessor 설정

MessageSource 인터페이스의 구현체인 ReloadableResourceBundleMessageSource를 사용해 Message 설정파일을 읽어드린다.
여기서 Line 17의 cacheSeconds 설정은 인자값으로 주어진 초마다 파일의 내용을 변경된걸 감지하게되면 리로드 하게되는데 리로드 하게되면 서버 재기동없이 바로 반영된다.

 

그리고 basenames에 값을 세팅할때는 파일명만 적고 확장자를 제거해준다. 그 이유는 Spring이 설정파일을 읽어드릴때 위 사진처럼 Message설정파일의 확장자를 런타임시에 붙혀준다.

설정파일 생성

필자는 Message 설정파일을 properties 파일로 생성해두었다.
여기서 파일명 중간에 국가별 언어코드와 국가코드가 있는데 이부분은 아래에서 다국어 설정에서 설명하겠다.

다국어 설정 세팅

MessageSource에선 설정파일별로 다국어 지원도 해주게 된다. 현재 한국어 설정파일과 영어 설정파일 두개를 만들어 놓았고.
key - value 형식으로 데이터를 셋팅했다. 중간에 {0}, {1} 이런식으로 되있는건 해당 code에 맞는 message를 호출할때 파라미터로 배열을 넘겨 각 배열 인덱스의 값이 표기된 인덱스번호에 바인딩 처리된다.


여기서 중요한건 설정파일의 명명규칙에 맞게 파일을 생성해야 한다.

명명규칙
{basename}_언어코드_국가코드.properties or .xml

여기서 basename은 MessageSourceAccessor설정파일에 정의된 이름이다. basename은 사용자가 임의로 지정해도 상관없지만
언어코드 및 국가코드는 해당룰에 맞게 지정해야한다. 아래사진처럼 공식문서에 나온 내용을 사진으로 첨부한다.

 

국가별 언어코드 및 국가코드 확인

Locale객체의 getAvailableLocales() 메소드를 이용하면 각 국가에 대한 Locale정보를 배열로 얻을수 있다.
출력된 값을보면 영문자 2자도있고 영문자4자에 중간에 언더스코어가 붙은게 있는데. 2자리만 있는건 언어코드이며
4자리는 언어코드_국가코드 이다. 이제 테스트를 한번 돌려보자.

테스트

Locale.getDefault() 메서드를 호출하면 현재 설정된 locale 정보를 가져올 수 있다. default값이 ko_KR로 되있기때문에
message_ko_KR.properties파일에 정의된 'hello'라는 key에 매핑된 value값을 읽어드렸다.

 

만일 properties에 존재하지 않는 key로 조회하면 위와 같은 NoSuchMessageException이 발생하게 된다
해당 익셉션이 발생되지 않도록 MessageSourceAccessor설정파일에 코드1줄을 추가하자.

MessageSourceAccessor 설정추가

messageSource.setUseCodeAsDefaultMessage(true)로 설정시 해당 code에 매핑된 값을 찾지 못할시 code값 그대로 출력한다. 다시한번 테스트 돌려보자.

 

해당 code값 그대로 출력이 되었다. 이제 마지막으로 한국어 설정파일과, 영어 설정파일 두개를 읽어드려 파일안에 정의된값들을 읽어드려보자.

 

정상적으로 테스트가 완료되었다. default로 설정된 locale값이 아닌 특정 locale에 해당하는 값을 읽어드릴땐
getMessage 메소드 인자에 Locale 객체를 넘겨주면 된다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함