반응형
메세지 란?
- https://chb2005.tistory.com/82 여기서 thymeleaf Form 기능들에 대해 정리하면서 간단한 예제를 만들어 봄
- 이 예제를 통해 메세지 기능 설명 (예제를 몰라도 됨)
- 여기서 만든 페이지는 총 3 페이지
- 3개의 페이지에서 모두 "이름"이라는 단어가 들어감
- 전에는 "이름"이라는 단어를 아래 코드처럼 직접 써줬음
<label th:for="name">이름</label>
<input type="text" th:field="*{name}" placeholder="이름을 입력하세요"/>
- 그런데 만약 이 "이름"을 "학생명"이라고 바꾸고 싶다면?
- 3개의 페이지에 직접 들어가서 일일이 바꿔주면 되지만 프로젝트가 커질 수록 이 작업을 하기 힘들어 질 수 있음
- "이름"이란 단어를 한 곳에서 관리해 준다면 통일성도 유지할 수 있다는 장점이 있음
- 이 때 필요한 기능이 메세지 기능
메세지 기능 사용 방법
- properties 파일을 만들기 전에 properties 파일들의 인코딩 방식을 먼저 UTF-8로 변경해줘야 함
- 안 해주면 properties에 우리가 적는 한글이 깨지면서 ?로 들어감
- Preferences(Settings) -> Editor -> File Encodings에 들어가서 표시한 부분을 UTF-8로 변경
- 프로젝트의 resources 폴더 안에 messages.properties 파일 생성 후 아래의 코드 추가
- 스프링 부트에서는 별도의 빈 등록 없이 이 파일의 이름만 맞춰주면 자동으로 연결
label.student.name = 이름
- application.properties에도 아래의 코드 추가
- 이 코드는 추가 안해도 자동으로 스프링에서 적용시켜주긴 함
- 하지만 errors 등 다른 값을 넣어주면 자동 적용이 깨지기 때문에 알아둘 필요는 있음
spring.messages.basename = messages
- thymeleaf의 th:text와 #{} 표현식을 이용해 아래와 같이 변경
- 변경 전
<label th:for="name">이름<label/>
- 변경 후
<label th:for="name" th:text="#{label.student.name}"/>
- "이름" 단어가 있는 부분을 모두 변경하면 됨
<div th:text="'이름 : ' + ${student.name}"/>
- 위와 같은 코드에서는 | | 표현식을 사용하면 편리
<div th:text="|#{label.student.name} : ${student.name}|"/> <br/>
- 프로젝트를 실행해보면 전과 같이 "이름"으로 출력되는 것을 확인할 수 있음
- 모든 "이름"을 "학생명"으로 바꿔주고 싶다면 message.properties에서 한 번만 변경해 주면 됨
국제화 란?
- 위에서 메세지 기능으로 모든 단어들을 한 곳에서 관리하게 함
- 그런데 이 단어들이 지금은 모두 한국어로 정리를 해놨는데 한국이 아닌 다른곳에서 접속 시 다른 언어로도 번역을 해놓을 필요가 있을 수 있음
- 이 때 필요한 기능이 국제화
국제화 기능 사용 방법
- 예시로 영어로 번역하는 작업을 해봄
- 프로젝트의 resources 폴더 밑에 messages_en.properties 파일 생성 후 다음과 같이 코드 작성하면 됨
label.student.name = Student Name
국제화 사용 결과
- 인터넷 브라우저에서 사용 언어를 영어로 변경 후 다시 접속해보면 아래와 같이 미리 설정해둔 "이름"만 "Student Name"으로 변경된 것을 확인할 수 있음
반응형
'Spring Boot > 문법 정리' 카테고리의 다른 글
[Spring Boot] Filter & Interceptor (0) | 2022.06.23 |
---|---|
[Spring Boot] Validation, 에러메세지 설정방법 (2) | 2022.06.11 |
[Spring Boot] Thymeleaf - form 관련 기능 정리 (1) | 2022.06.09 |
[Spring Boot] Thymeleaf 기능 정리 (0) | 2022.06.04 |
[Spring Boot] DI, @Autowired, @RequiredArgsConstructor (0) | 2022.05.17 |