본문 바로가기

Backend/Spring | SpringBoot

[egovFramework] spring message이용

반응형

기본 준비 작업

1. context-common.xml

  • context.xml: 톰캣에서 구동되는 웹 어플리케이션 자체 설정 관리
  • 사용할 message.properties 파일을 설정
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
	<property name="basenames">
		<list>
			<value>classpath:/egovframework/message/com/message-common</value>
			<value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
			<value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
			<value>classpath:/egovframework/egovProps/globals</value>
		</list>
	</property>
	<property name="cacheSeconds">
		<value>60</value>
	</property>
</bean>
<bean id="egovMessageSource" class="egovframework.com.cmm.EgovMessageSource">
	<property name="reloadableResourceBundleMessageSource">
		<ref bean="messageSource" />
	</property>
</bean>

 

2. servlet.xml

  • servlet.xml: 스프링 설정파일
  • interceptor를 설정해서 페이지 접속 시 인터셉트해서 language를 설정함
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="language" />
</bean>

 

혹은 

위의 두가지를 설정하지 않고 Config파일을 따로 지정하는 방법도 있다.

i18nConfig.java

package ncdc.cancermonitor.cmmn;

import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

@Configuration
@Component
public abstract class i18nConfig implements WebMvcConfigurer {

//	// 세션으로 변경
//    @Bean
//    public LocaleResolver localeResolver() {
//        SessionLocaleResolver resolver = new SessionLocaleResolver();
//        resolver.setDefaultLocale(Locale.getDefault());
//        return resolver;
//    }

    // 쿠키로 검증
    @Bean
    public LocaleResolver localeResolver() {
        CookieLocaleResolver resolver = new CookieLocaleResolver();
        resolver.setDefaultLocale(Locale.getDefault());
        resolver.setCookieName("lang");
        resolver.setCookieMaxAge(3600); // 쿠키의 유효 기간 설정 (초 단위, 예: 1시간)
        return resolver;
    }

//	// 파라미터 값으로 locale변경
//    @Bean
//    public LocaleChangeInterceptor localeChangeInterceptor() {
//        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
//        interceptor.setParamName("lang");
//        return interceptor;
//    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
         // 메시지 파일 경로 및 이름 설정
         // 언어 구분자 전 까지 표기(eg. /egovframework/messages/message_ko.properties)
        messageSource.setBasename("classpath:/egovframework/messages/message");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

 

설정들

1. message내용 작성

(보통 message-common.properties, message-common_ko.properties , message-common_en.properties 로 나눠 작성)

##UI resource#
#list.sample=List Sample
button.search=검색
button.modify=수정
button.create=등록
button.reset=재설정
button.delete=삭제
search.choose=검색어 선택
search.keyword=검색어 입력
search.name=이름

 

2. egovframework.com.cmm 에 EgovMessageSource.java 추가 java 에서 사용

@Controller 
public class IndexController  extends CommonController {
	
    ...
    
	@Resource(name="egovMessageSource")
	EgovMessageSource egovMessageSource;

	...
    /**
     * 메인
     * @param locale
     * @param model
     * @return
     * @throws Exception 
     */
	
	@RequestMapping(value = "/main")
	public String indexEng(HttpServletRequest request, HttpServletResponse response, 
									@RequestParam HashMap hMap, Model model,SearchCriteria cri,
									HttpSession session) throws IOException, Exception {
		
		String returnPage = "index";
        // 서버에서 확인시 필요하지만 없어도 페이지에서 동작하는데는 무방
		String message = egovMessageSource.getMessage("메시지코드");
        
        ...
        
		return returnPage;
    }

 

3. JSP에서 사용

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<spring:message code="메시지코드" />
	...
	<li><a href="#" onclick="changeLanguage('en')"><spring:message code="top.language.eng" /></a></li>
    <li><a href="#" onclick="changeLanguage('ko')"><spring:message code="top.language.kor" /></a></li>
	...
<script>
function changeLanguage(lang) {
//	// 세션에 저장
//    sessionStorage.setItem('lang', lang);
//    
//    // 파라미터 추가
//    const url = new URL(window.location.href);
//    url.searchParams.set('lang', lang);
//    window.location.href = url.toString();

		// 쿠키에 lang 요소 추가
		document.cookie = "lang=" + lang + "; path=/";

		// 페이지 새로 고침
		location.reload();
	}

	// 페이지 로드 시 쿠키 값 표시
	window.onload = function() {
		var lang = getCookie('lang');
		if (lang) {
			document.getElementById('sessionValue').innerText = 'Lang: ' + lang;
		} else {
			document.getElementById('sessionValue').innerText = 'Lang is not set';
		}
	}

	// 쿠키 값 가져오기
	function getCookie(name) {
		let matches = document.cookie.match(new RegExp(
		"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
		));
		return matches ? decodeURIComponent(matches[1]) : undefined;
	}
</script>

 

반응형

'Backend > Spring | SpringBoot' 카테고리의 다른 글

[Oauth2] 회고2  (0) 2024.06.12
[Oauth2] 회고 1  (0) 2024.06.11
[Spring Security] Header정보 추가 시점  (0) 2024.05.10
[Spring] Spring Errors  (0) 2024.05.09
[Oauth2.0] Kakao Oauth2 연동  (0) 2024.05.09