메시지
만약 어떤 쇼핑몰 서비스에서 화면에 보이는 모든 "상품명"이라는 단어들을 "제품명"으로 바꿔달라고 하면 어떻게 해야 할까? 서비스에서 쓰이는 모든 html을 뒤져서 "상품명"을 찾아서 제품명으로 일일히 바꿔야 될 수도 있다.
이럴 때 자주 사용되는 메시지들을 한 곳에 모아서 관리하도록 하는 기능을 메시지 기능 이라고 한다.
또는, 우리 서비스가 해외로 진출하게 되어서 중국어, 영어, 독일어 등등 여러 언어를 지원해야 하는 상황이다.
이때 메시지 기능이 없다면, 모든 html을 복사해서 각국의 언어로 텍스트를 변경해야 할것이다.
메시지 기능을 이용하여, 접속자의 언어에 따라 메시지를 변경해주도록 할 수 있다. 이를 국제화 라고 한다.
타임리프와 스프링 메시지 기능을 이용하면 웹페이지 화면에서 반복적으로 쓰이는 텍스트를 수정하고자 할 때, html파일에서 일일이 변경하지 않고, 한 번에 변경할 수 있다.
1. 스프링 부트 메시지 소스 설정
application.properties에 아래와 같은 메시지 소스를 설정할 수 있다.
spring.messages.basename=messages, errors
스프링 부트 메시지 소스 기본 값
spring.messages.basename=messages이 기본 값이다.
따라서 기본적인 messages.properties 만 이용할 경우에는 위의 값을 추가하지 않아도 된다.
위와 같이 메시지 소스 기본값을 설정 해주면,
messages.properties , messages_en.properties , messages_kr.properties와 같은 파일들을 등록해서 스프링부트가 자동으로 인식하게 할 수 있다.
에러 메시지
에러메시지도 같은 방법으로 사용할 수 있다.
application.properties에 errors를 추가하고, errors.properties, errors_en.properties 등으로 관리할 수 있다.
2. 스프링 부트 메시지 소스 적용 방법
1) messages.properties
프로젝트의 resources 폴더에 messages.properties 파일을 추가해서 메시지 기능을 이용할 수 있다.
아래와 같은 메시지들로 messages.properties 파일을 구성한다.
- label.member.id=ID
- page.members=멤버 목록
- button.deleteMember=멤버 삭제
2) html 수정
html 파일에서 th:text="#{...}"를 설정해 준다.
<h1 th:text="#{page.members}">멤버 목록</h1>
3) 메시지 소스와 연결
위와 같이 messages.properties에는 page.members=멤버 목록 이 있고,
<h1 th:text="#{page.members}" >와 같이 멤버 목록 </h1> 태그에#{page.members}이 존재하면,
th:text="멤버 목록"처럼 동작하게 된다.
2. 국제화
국제화를 적용하면 접속 국가의 언어에 따라 해당 프로그램의 언어를 자동으로 변경할 수 있다.
국제화도 위의 메시지기능을 응용한 것이다. 한국어 버전 html을 그대로 복사해서 텍스트를 일일이 영어로 바꾸지 않고, messages_en.properties
파일을 추가해서, 각각의 텍스트를 영어로 출력해야 할 때 어떤 텍스트를 출력할지 설정할 수 있다.
Spring은 HTTP 헤더의 Accept-Language 값을 사용해서 언어를 선택한다. Accept-Langhuage가 en일 때는 messages_en.properties
소스를 찾아서 html에 적용한다.
적용 방법은 간단하지만, 손이 많이 간다. 하지만 이것은 맨 처음 세팅할 때만 손이 많이 가고, 나중에 프로그램 내의 텍스트를 변경할 일이 생겼을 때는 아주 손쉽게 변경할 수 있다.
Accept-Language을 en으로 변경하는 방법
- Google Chrome - 설정 - 언어 - 영어 - 이 언어로 Chrome표시
3. messages.properties 파일 예시
아래와 같이 각각의 변수에 따른 텍스트를 입력해 준다.
이제 서비스에서 생년월일
을 생일
로 바꾸고 싶다면, messages.properties 파일에서 생년월일을 생일로 바꾸기만 하면 된다.
(참고) 김영한 님 인프런 Spring MVC-2
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2
'JAVA & Spring > Spring' 카테고리의 다른 글
[Spring] 세션, 쿠키, @SessionAttribute 로그인 확인 (0) | 2023.04.21 |
---|---|
[Spring Boot] PRG 패턴 ( Post - Redirect - Get ) (1) | 2023.04.21 |
[Spring Boot] @PathVariable과 @RequestParam - 파라미터 받기 (0) | 2023.04.21 |
[Spring Boot] 스프링 인터셉터 (Spring Interceptor) (0) | 2023.04.21 |
[Spring] Bean Validation (0) | 2023.04.21 |