MessageSource 메시지, 국제화

떡ol·2022년 9월 16일
0
post-thumbnail

MessagSource는 사용자가 따로 작성해둔 property file에 key 값을 불러와 String값을 불러와준다.
따로 컴파일없이 property 파일만 바꿔주면 되서 에러메시지, 특정 안내문등을 저장해서 사용하면 좋다. 사실 가장 중요한 기능은 Locale(지역)에 따른 메시지 설정이 따로 가능하다는 것이다. 여기서는 ReloadableResourceBundleMessage를 사용하겠다. 이게 서버 재가동 없이 reload되서 편하다.

1-1.ReloadableResourceBundleMessageSource 등록하기

😊 다음과 같이 선언하여 사용한다.

	<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>classpath:/messages/common_msg</value>
			</list>
		</property>
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
		<property name="cacheSeconds">
			<value>60</value>
		</property>
	</bean>
  • defaultEncoding : 말그대로다 기본 인코딩은 작성하면 된다.
  • basenames : 리스트로 감싸서 사용하며 여러게의 value를 입력 가능하다. ('classpath:' 는 src/main/resource/ 로 따로 설정 해두었다.)
  • cacheSeconds :입력한 시간 후에 해당 파일을 다시 읽어온다.

1-2.Java Bean config로 등록하기

@Bean
public MessageSource messageSource() {
  ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
  messageSource.setBasenames("messages", "errors");
  messageSource.setDefaultEncoding("utf-8");
  return messageSource;
}

1-3.Java boot application config하기

boot는 application.properties(또는 .yml)에 설정 파일명을 선언한다.
폴더단위는 페키지를 쓸때처럼 닷(.) 으로 작성한다. 파일 여러개는 콤마(,)

spring.messages.basename=messages,config.i18n.messages

설정을 안하더라도 기본적으로 boot는 spring.messages.basename=messages를 등록하고 있는 셈이니, messages로 시작하는 모든 properties파일을 읽어드립니다.

2.Service 파일만들기

😊 매번 불러오기 불편하므로 그냥 Service로 관리하자.

@Service
public class MessageUtils {
	
	@Resource
	MessageSource messageSource;
	
	public String getMessage(String code, String args[]) {
		return messageSource.getMessage(code, args, Locale.getDefault());
		
	}
	
	
	public String getEnMessage(String code, String args[]) {
		return messageSource.getMessage(code, args, Locale.ENGLISH);
		
	}

	
	public String getKrMessage(String code, String args[]) {
		return messageSource.getMessage(code, args, Locale.KOREA);
		
	}

}

messageSource의 getMessage 변수는 다음과 같다. 그 밖에 매개변수를 갖는 메서드들은 각자 확인하기.

messageSource.getMessage(key, args, Locale)
  • key : 파일의 키값을 작성한다.
  • args : 사용자 메시지를 넣을 수 있다 array를 넘겨준다.
  • Locale : 로케일 정보를 넣는다 defalut를 사용하면 한국이다.

😊 내용을 보면 ENGLISH, KOREA가 보이는데 지역을 저렇게 설정하면, 강제적으로 해당 언어의 파일을 불러온다. 파일 네이밍은 다음과 같다.


3.property 파일 생성하기

😊 파일을 다음과 같이 만들고 파일이름도 상단에 classpath:/messages/common_msg 에 맞춰 작성한다 .

😊 앞의 E01이 Key 이고 그뒤가 String Value값들이다.
{0}, {1}순으로 args 값들을 사용자가 메시지값을 넣을 수 있다.


4. 메인 파일에 messageSource 불러와 사용하기

@Resource
	MessageUtils messageUtils;
    
public test(){
	String messageTest = messageUtils.getMessage("E01", null);
	System.out.println("messageTest :: "+ messageTest);
}
profile
하이

0개의 댓글