반응형
기본 준비 작업
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 |