일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 모던 자바스크립트 Deep Dive
- JPA
- 게시판 작성자를 아이디로
- 관계형 데이터베이스
- UUID
- java
- spring security
- 공백검사
- 스프링 시큐리티
- 출처 모던 자바스크립트 Deep Dive
- 중복되지 않는 값 만들기
- 자바
- 자바스크립트
- msa
- 유효성검사
- 자바 ORM 표준 JPA 프로그래밍
- Thymeleaf
- ORM
- Today
- Total
인지용
스프링 다국어 처리 기본 설정 본문
기본 설정 방법
1. 언어 파일 생성
/src/main/resources/messages 폴더 밑에 언어별 properties 파일 생성
(마지막에 들어가는 ko, en 등등은 언어코드를 넣어줘야 한다.)
messageContext.properties 파일 추가 이유는
locale에 대응하는 파일이 없을 경우 default로 messageContext.properties 파일을 참조하기 때문이다.
그래서 기본으로 표시할 언어의 값들을 messageContext.properties에 추가해놓으면 된다.
언어 파일별로 값만 변경해주면 된다.
2. ReloadableResourceBundleMessageSource 빈 등록
context-common.xml
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/messages/messageContext</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
<property name="cacheSeconds" value="60"/>
</bean>
-> 아래에 messages 폴더에서 messageContext로 시작하는 파일중에서 언어코드에 맞는 파일을 찾겠다는 의미.
쿠키의 값이 ko라면, messageContext_ko.properties 파일을,
쿠키의 값이 en이라면, messageContext_en.properties 파일을 참조하겠다는 뜻
3. LocaleChangeInterceptor 및 localeResolver 빈 등록
dispatcher-servlet.xml
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="language" />
<property name="defaultLocale" value="en"/>
</bean>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
localeResolver의 종류로는 대표적으로 cookie, session, header가 있다.
현재의 경우 CookieLocaleResolver로 설정해놨기 때문에
쿠키의 키 : language, 값 : 언어코드를 설정하고 새로고침하면 된다.
사용방법
properties에서 메시지 선언 방법
message.test.msg1=게시판
message.test.msg2=총 게시글 개수 {0}개
message.test.msg3={0}님의 {1}번째 생일
중괄호는 외부에서 값을 받아서 사용하겠다는 의미
(외부에서 값 주입방법은 아래에 있다.)
jsp
<div>
<ul>
<li>
<%--사용방법1, 일반--%>
msg1 = <spring:message code="message.test.msg1"/>
<input type="text" placeholder="<spring:message code="message.user.login.id"/>" name="id" id="id">
</li>
<li>
<%--사용방법2, 메시지 파라미터가 하나일 때--%>
msg2 = <spring:message code="message.test.msg2" arguments="one"/>
</li>
<li>
<%--사용방법3, 메시지 파라미터가 여러개일 때--%>
msg3 = <spring:message code="message.test.msg3" arguments="${value}, two" argumentSeparator=","/>
</li>
</ul>
</div>
javascript
<script type="text/javascript">
function alertTest(){
<%--사용방법1, 일반--%>
alert("<spring:message code="message.test.msg1"/>");
<%--사용방법2, 메시지 파라미터가 하나일 때--%>
alert("<spring:message code="message.test.msg2" arguments="one"/>");
<%--사용방법3, 메시지 파라미터가 여러개일 때--%>
alert("<spring:message code="message.test.msg3" arguments="${value}, two" argumentSeparator=","/>");
</script>
java
import org.springframework.context.MessageSource;
@Service
public class TestService {
@Autowired
private MessageSource messageSource;
private void testMessage(){
//사용방법1, 일반
String message1 = messageSource.getMessage("message.test.msg1", null, "defaultMessage", Locale.KOREA);
//사용방법2, 메시지 파라미터가 존재할 때
String message2 = messageSource.getMessage("message.test.msg1", new Object[]{"params of message", "test"}, Locale.KOREA);
//사용방법3, 여러 메시지들 중 하나 사용할 때
//제일 먼저 발견되는 메시지 리턴
String[] codes = new String[] {"message.test.msg3", "message.test.msg4"};
MessageSourceResolvable resolvable = new DefaultMessageSourceResolvable(codes, null, "default");
String message3 = messageSource.getMessage(resolvable, Locale.KOREA);
}
}
자바에서는 MessageSource를 주입받아서 사용해야 한다.
messageSource를 통해서 메시지를 가져오는 메소드는 3개가 있다.
1번 String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
String code : 메시지 경로
Object[] args : 메시지 파라미터 값 (없으면 null 넣으면 됨)
String defaultMessage : 메시지가 없을때 사용할 기본 메시지
Locale locale : 언어 properties 구분
2번 String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException;
1번과 마찬가지지만 defaultMessage만 빠졌음
3번 String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
MessageSourceResolvable 생성시에 메시지 경로가 담긴 String 배열이 들어간다.
해당 메시지들을 순차적으로 찾으면서
있으면 해당 메시지 리턴
없으면 다음 메시지를 찾는다는 의미
테스트
쿠키의 langugae가 ko일 때
쿠키의 langugae가 en일 때
출처
https://help.ads.microsoft.com/#apex/18/ko/10004/-1
https://www.44bits.io/ko/keyword/locale
https://heidish.tistory.com/86
https://blog.naver.com/PostView.nhn?blogId=talag&logNo=220046781150
https://offbyone.tistory.com/382
https://stackoverflow.com/questions/8588365/spring-message-tag-with-multiple-arguments