반응형

메세지 란?

  • https://chb2005.tistory.com/82 여기서 thymeleaf Form 기능들에 대해 정리하면서 간단한 예제를 만들어 봄
  • 이 예제를 통해 메세지 기능 설명 (예제를 몰라도 됨)
  • 여기서 만든 페이지는 총 3 페이지





 

  • 3개의 페이지에서 모두 "이름"이라는 단어가 들어감
  • 전에는 "이름"이라는 단어를 아래 코드처럼 직접 써줬음
<label th:for="name">이름</label>
<input type="text" th:field="*{name}" placeholder="이름을 입력하세요"/>
  • 그런데 만약 이 "이름"을 "학생명"이라고 바꾸고 싶다면?
  • 3개의 페이지에 직접 들어가서 일일이 바꿔주면 되지만 프로젝트가 커질 수록 이 작업을 하기 힘들어 질 수 있음
  • "이름"이란 단어를 한 곳에서 관리해 준다면 통일성도 유지할 수 있다는 장점이 있음
  • 이 때 필요한 기능이 메세지 기능

메세지 기능 사용 방법

  1. properties 파일을 만들기 전에 properties 파일들의 인코딩 방식을 먼저 UTF-8로 변경해줘야 함
  • 안 해주면 properties에 우리가 적는 한글이 깨지면서 ?로 들어감
  • Preferences(Settings) -> Editor -> File Encodings에 들어가서 표시한 부분을 UTF-8로 변경

  1. 프로젝트의 resources 폴더 안에 messages.properties 파일 생성 후 아래의 코드 추가
  • 스프링 부트에서는 별도의 빈 등록 없이 이 파일의 이름만 맞춰주면 자동으로 연결
label.student.name = 이름
  1. application.properties에도 아래의 코드 추가
  • 이 코드는 추가 안해도 자동으로 스프링에서 적용시켜주긴 함
  • 하지만 errors 등 다른 값을 넣어주면 자동 적용이 깨지기 때문에 알아둘 필요는 있음
spring.messages.basename = messages
  1. 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/>
  1. 프로젝트를 실행해보면 전과 같이 "이름"으로 출력되는 것을 확인할 수 있음
  2. 모든 "이름"을 "학생명"으로 바꿔주고 싶다면 message.properties에서 한 번만 변경해 주면 됨

국제화 란?

  • 위에서 메세지 기능으로 모든 단어들을 한 곳에서 관리하게 함
  • 그런데 이 단어들이 지금은 모두 한국어로 정리를 해놨는데 한국이 아닌 다른곳에서 접속 시 다른 언어로도 번역을 해놓을 필요가 있을 수 있음
  • 이 때 필요한 기능이 국제화

국제화 기능 사용 방법

  • 예시로 영어로 번역하는 작업을 해봄
  • 프로젝트의 resources 폴더 밑에 messages_en.properties 파일 생성 후 다음과 같이 코드 작성하면 됨
label.student.name = Student Name

국제화 사용 결과

  • 인터넷 브라우저에서 사용 언어를 영어로 변경 후 다시 접속해보면 아래와 같이 미리 설정해둔 "이름"만 "Student Name"으로 변경된 것을 확인할 수 있음

반응형

↓ 클릭시 이동

복사했습니다!