메시지, 국제화
실행 환경
버전 명시 없음 —
spring.messages.basename등 Spring Boot 자동 설정 프로퍼티를 사용하는 것으로 보아 Spring Boot 프로젝트로 보이나, 구체적인 Spring Boot/Spring 버전은 확인할 수 없다.
- 메시지
- 국제화
화면에 노출되는 문구(라벨, 버튼 텍스트 등)를 코드에서 분리해 한 곳에서 관리하면, 문구 변경이나 언어 추가 시 소스 코드를 건드리지 않고 프로퍼티 파일만 교체하면 되므로 국제화(i18n) 대응과 유지보수가 쉬워진다.
Bean 등록 (message)
- 직접 등록
@Bean
public MessageSource messageSource(){
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages", "errors");
messageSource.setDefaultEncoding("utf-8");
return messageSource;
}- 자동 등록
- messages 라고 자동 등록 되어있음
- spring boot 등록
spring.messages.basename=messages (기본 값)
// 값의 messages를 변경하면 파일이름을 다르게 설정할 수 있음
세 방식 중 직접 등록은 인코딩·basename 등을 세밀하게 제어해야 할 때 사용하고, Spring Boot의 spring.messages.basename 자동 등록은 관례(messages.properties)를 그대로 따르는 것만으로 충분한 경우가 많아 실무에서 가장 널리 쓰인다.
메시지, 국제화 파일 생성
- /Resources 하위에 생성
- messages.properties
- messages_en.properites
메시지,국제화 사용법
- messages.properties
label.item=상품
label.item.id=상품 ID
label.item.itemName=상품명
label.item.price=가격
label.item.quantity=수량
page.items=상품 목록
page.item=상품 상세
page.addItem=상품 등록
page.updateItem=상품 수정
button.save=저장
button.cancel=취소
- html 페이지 사용법
#{…}
ex)
Spring Locale 설정
- Spring 은 기본으로 http 헤더의 accept-Language를 사용
- 수정하고 싶을경우 -> LocaleResolver 인터페이스 활용
| 클래스 | 설명 |
|---|---|
| AcceptHeaderLocaleResolver | Accept-Language를 기반으로 Locale 설정- setLocale() 지원 x |
| SessionLocaleResolver | setLocale()을 통해 세션에 Locale 정보 저장 |
| CookieLocaleResolver | setLocale()을 통해 쿠키에 Locale 정보 저장 |
| FixedLocaleResolver | 웹 요청에 상관없이 특정 Locale 설정- setLocale() 지원 x |
어떤 LocaleResolver를 쓸지는 로케일을 어디에 지속시킬지에 달려있다. AcceptHeaderLocaleResolver는 브라우저 설정을 그대로 따르므로 별도 저장이 필요 없지만 사용자가 언어를 직접 바꿀 수 없고, SessionLocaleResolver/CookieLocaleResolver는 사용자가 언어를 선택하면 그 값을 세션 또는 쿠키에 유지해 다음 요청에도 반영할 수 있다. FixedLocaleResolver는 서비스가 단일 언어만 지원할 때 사용한다.
관련 문서
- (Spring) 메시지, 국제화 - 핵심 개념 및 특징 정리 — 이 노트의 MessageSource/LocaleResolver 이론을 실제 프로젝트 코드로 확장한 실습 노트