메시지, 국제화

실행 환경

버전 명시 없음 — spring.messages.basename 등 Spring Boot 자동 설정 프로퍼티를 사용하는 것으로 보아 Spring Boot 프로젝트로 보이나, 구체적인 Spring Boot/Spring 버전은 확인할 수 없다.

  1. 메시지
  2. 국제화

화면에 노출되는 문구(라벨, 버튼 텍스트 등)를 코드에서 분리해 한 곳에서 관리하면, 문구 변경이나 언어 추가 시 소스 코드를 건드리지 않고 프로퍼티 파일만 교체하면 되므로 국제화(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 인터페이스 활용
클래스설명
AcceptHeaderLocaleResolverAccept-Language를 기반으로 Locale 설정- setLocale() 지원 x
SessionLocaleResolversetLocale()을 통해 세션에 Locale 정보 저장
CookieLocaleResolversetLocale()을 통해 쿠키에 Locale 정보 저장
FixedLocaleResolver웹 요청에 상관없이 특정 Locale 설정- setLocale() 지원 x

어떤 LocaleResolver를 쓸지는 로케일을 어디에 지속시킬지에 달려있다. AcceptHeaderLocaleResolver는 브라우저 설정을 그대로 따르므로 별도 저장이 필요 없지만 사용자가 언어를 직접 바꿀 수 없고, SessionLocaleResolver/CookieLocaleResolver는 사용자가 언어를 선택하면 그 값을 세션 또는 쿠키에 유지해 다음 요청에도 반영할 수 있다. FixedLocaleResolver는 서비스가 단일 언어만 지원할 때 사용한다.

관련 문서