다국어 페이지 설정
- 한글은 ko
- 영어는 en
- 일어는 jp
1. 다국어 Message 파일 작성
1. /src/main/resources/ 하위에 폴더를 생성
/src/main/resources/messages 폴더 생성
2. message를 저장할 파일 생성
- 형식이 있음
- 기본파일은 ****.properties(ex: message.properties)
- 한국어 파일은 기본파일명과 동일한 이름뒤에 국가코드 작성
(ex: message_ko.properties)
- 다른 언어도 동일
(ex: message_en.properties)
3. message.properties에서 여러줄을 입력
- \ 로 구분
- loginSuccess=ID가 {0} <br> 이고이름이 {1} 인분 환영합니다 \
글이 길어질때
1. application.properties
1) message.properties의 위치와 파일명 설정
## message 파일의 위치와 이름 -> 폴더명/파일명
## messages/message로 시작하는 모든 파일
spring.messages.basename=messages/message
2) Encoding
spring.messages.encoding=UTF-8
3) message(key)가 없는 경우
spring.messages.use-code-as-default-message=true
### true : 예외를 발생 시키지 않고 key를 출력
### false : 예외를 발생
4) message 파일 내용의 변경을 감지하는 간격(초단위)
spring.messages.cache-duration=600
3. Java 적용
- 언어를 구분하는 방법은 Cookie나 Session을 사용
- Interceptor를 사용하여 언어별 message를 사용
1. java class 선언
2. WebMvcConfigure Interface 구현
3. 클래스 선언부에 @Configuration 선언
-------------------------------------------------------
@Configuration
public class MessageConfig implements WebMvcConfigurer {
1. Cookie또는 Session 사용 결정
@Bean
//method명은 꼭 localeResolver로
public LocaleResolver localeResolver() {
//1. session
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocale(Locale.KOREAN);
//2. Cookie
CookieLocaleResolver cResolver = new CookieLocaleResolver("lang");
cResolver.setDefaultLocale(Locale.KOREAN);
cResolver.setCookieName("lang");//deprecated
return cResolver;
}
-------------------------------------------------------
2. Message Interceptor 객체 생성
//Interceptor 객체
@Bean
public LocaleChangeInterceptor changeInterceptor() {
LocaleChangeInterceptor changeInterceptor = new LocaleChangeInterceptor();
changeInterceptor.setParamName("lang");
//parameter를 받아서 언어 구분
//url?lang=en
return changeInterceptor;
}
}
3. Interceptor 등록
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired //IOC(Inversion Of Control)
private TestInterceptor testInterceptor;
@Autowired
private StudyInterceptor studyInterceptor;
@Autowired
private LocaleChangeInterceptor localeChangeInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//method 체이닝
//적용할 Interceptor 등록
registry.addInterceptor(testInterceptor)
//Interceptor를 적용할 URL 등록
.addPathPatterns("/qna/**")
.addPathPatterns("/notice/**")
//제외할 URL등록
.excludePathPatterns("/qna/detail")
.excludePathPatterns("/qna/write");
//추가 Interceptor등록
registry.addInterceptor(studyInterceptor)
.addPathPatterns("/qna/**");
-------------------------------------------------------
//message Interceptor 등록
registry.addInterceptor(localeChangeInterceptor)
.addPathPatterns("/**");
}
}
4. JSP 사용
1. jsp에 spring message를 사용할 수 있도록 tag lib 선언
<%@ taglib prefix="spring" uri="<http://www.springframework.org/tags>" %>
2. message 기본 문법
<spring:message code="properites의 key" text="code가 없을 때 기본 메세지"
arguments="${}, ${}, ${}" argumentSeperator="구분자" var="변수명"/>
a. message를 변수에 저장하고 다른 곳에서 출력
<spring:message code="hi" var="m" text="기본메세지"/>
<h3>${m}</h3>
b. message에서 여러개를 구분해서 출력
a) message.properties
welcome=회원님의 ID는 {0} 이고 Name은 {1} 입니다
b) jsp
<spring:message code="welcome"
arguments="${member.id}-${member.name}" argumentSeperator="-" />