Java/Spring

[Spring]스프링 프로젝트 다국어 처리

오늘의개발부 2020. 2. 3. 20:51
반응형

1. 다음과 같이 propertis 파일을 만들어준다.

다음처럼 키값 형태로 데이터를 넣는다.

 

main.title= {0}의 홈페이지입니다.
main.hello=안녕하세요.

 

 

 

2.  language-context.xml을 생성한다.

<bean id="messageSource"
	class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
	<property name="basenames">
		<list> <!-- 메세지 파일의 위치 lang_언어.properties 파일을 찾음 -->
			<value>/WEB-INF/languages/lang</value>
		</list>
	</property>
	<!-- 파일의 기본 인코딩 -->
	<property name="defaultEncoding" value="UTF-8" />
	<!-- properties 캐시를 확인하는 주기 지정 -->
	<property name="cacheSeconds" value="3600" />
</bean>
<!-- 언어 정보를 세션에 저장. 디폴트를 kor로 사용 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
	<property name="defaultLocale" value="kor"/>
</bean>

 

3. web.xml에서 language-context.xml을 읽어준다

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
     	/WEB-INF/spring/root-context.xml
     	/WEB-INF/spring/language-context.xml
	</param-value>
</context-param>

 

4. view에서 spring 태그를 이용해 사용한다.

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
.
.
.
<title><spring:message code="main.title" arguments="나" text="defalut" /></title>
<!-- properties 파일 내에 {0} 등으로 선언해주면 arguments의 값을 대입할 수 있다-->

 

5. 로그인 등의 로직에서 사용자의 lang 코드 값에 따라 언어를 바꿔준다.

@Inject
SessionLocaleResolver localeResolver;

@GetMapping("/login")
	public String setLogin(
    		@RequestParam(name="lang", defaultValue = "")String langCode,
   		    HttpServletRequest request,
   		    HttpServletResponse response) {
		
		Locale locale = new Locale(langCode);
		localeResolver.setLocale(request, response, locale);
		
		return "/system/main";
	}

예시 소스. 로그인할 때 langCode의 값을 변경해준다고 할 때 로그인 로직을 끝낸 후 위와 같이 간단하게 변경할 수 있다. 실제로는 파라미터로 받을 게 아니라 로그인 처리시 사용자의 언어값을 DB에서 가져와서 변경해줄 것이다.

반응형