일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 함수 선언
- 예제
- SQL입문
- 크롤링
- 숫자형식오류
- 웹브라우저 수용도
- 웹 브라우저 전쟁
- 생성자
- dbms
- HTML역사
- 데이터베이스
- DoIt
- 함수
- 예외
- 자바 오류
- R1C3
- 배열 3요소
- 자바
- html
- 숫자 형식
- Doit입문SQL
- 페이지분석
- DoitSQL입문
- DoitSQL
- SQL
- 우아한테크
- 배열 예제
- 키-값 데이터베이스
- 크롤링 오류
- 자바 예외
- Today
- Total
프로그래밍
[Spring] day74 : 다국어처리 본문
2023.08.24.목
다국어처리
예전에는 다른언어로 서비스를 해야했을때 .jsp 파일 자체를 새로 제작해야 했었다
Spring 프로젝트에서는 "메세지 파일"만을 제작하여 활용이 가능하다
메세지 파일 추가
우리가 사용할 메세지 파일을 읽어들일 수 있는 Resolver는src/main/resources 경로를 읽기 때문에 해당 경로에 패키지를 만들 것이다메세지 파일은 '패키지이름File_언어.properties'로 설정한다
영어는 en한국어는 ko 등등이며 그외 언어 또한 설정 가능하다
messageFile_en.properties
# key = value
# insertBoard.jsp
header.title = INSERT TITLE
header.content = INSERT CONTENT
header.btn = INSERT
body.image = DEFAULT IMAGE
footer.gobackmain = GO BACK MAIN
messageFile_ko.properties
# key = value
# insertBoard.jsp
header.title = \uC81C\uBAA9 \uC791\uC131
header.content = \uB0B4\uC6A9 \uC791\uC131
header.btn = \uAE00 \uC791\uC131
body.image = \uC378\uB124\uC77C
footer.gobackmain = \uBA54\uC778\uC73C\uB85C \uB3CC\uC544\uAC00\uAE30
메세지 파일은 key = value 형식으로 이루어져있다키값을 설정 후 뒤에 번역할 내용(해당 언어)으로 작성하면 된다주석은 #으로 작성하며 한국어로 작성하면 자동으로 유니코드로 변환된다
. 은 들어가야 하는 것은 아니지만 통상적으로 넣어서 표기하는 편이다
어떠한 요소에 어떤 값이 들어갈지 정확히 나타내기 위해
~의 ~~라고 하면 가독성이 좋아진다
김철수
6학년 1반 김철수
메세지 파일 Resolver 등록
메세지 파일을 읽어들일 수 있는 Resolver(MessagSource)를 등록해야 한다
Resolver는 DispatcherServlet의 멤버변수이므로 DispatcherServlet-servlet.xml 에서 진행하도록 한다
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message.messageFile</value>
</list>
</property>
</bean>
해당 Resolver는 확장자 없이 작성한다
즉, en.properties / ko.properties 등을 작성하지 않는다
언어 설정(en, ko)은 자동으로 붙여주며 확장자(.properties)는 패키지 경로와 혼동될 수 있기 때문이다
MessageSource 클래스는 _en _ko..등을 자동으로 추가해준다
즉, 파일을 만들때마다(언어를 추가할때마다) 설정을 추가하지 않아도 된다
대신 자동으로 언어 설정을 파악할 수 있도록 역할하는 것을 등록 및 설정해야 한다
message 파일이 유독 확장자 문제가 많으므로
컴퓨터 설정에서 확장자를 항상 같이 나오도록 설정하도록하고
파일명만 작성하는건지 확장자까지 작성해야 하는지 확실히 유념하는 것이 좋다
LocaleChangeInterceptor 클래스 등록
웹 브라우저에서 서버에게 요청을 하게되면
HTTP 요청 헤더 내에 브라우저의 Locale 정보를 갖고 있게 된다
해당 Locale 정보를 추출할 LocaleResolver가 필요하다
LocaleResolver를 사용하기 위해 클래스를 등록해보자
DispatcherServlet-servlet.xml 에 mvc 네임스페이스를 추가한 후에 등록해야 한다(순서 중요)
LocaleChangeInterceptor를 사용하면 인위적으로 다른언어로 서비스할수 있도록 할 수 있다
∴언어설정을 변경할 수 있도록 된다
DispatcherServlet-servlet.xml
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
<property name="paramName" value="lang" />
setter 주입하여 lang이라는 파라미터로 언어설정 변경이 가능해졌다
페이지에 적용
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
해당 태그라이브러를 작성하면 언어설정을 불러올 수 있게 된다
<spring:message code='메세지 키'/> 해당 형식으로 사용하면 전체가 메세지 값으로 보여지는 형태이다
insertBoard.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글작성페이지</title>
</head>
<body>
<h1><a href="insertBoard.do?lang=en">EN</a> | <a href="insertBoard.do?lang=ko">KO</a></h1>
<form action="insertBoard.do" method="post" enctype="multipart/form-data">
<input type="hidden" name="writer" value="${member}">
<input type="text" name="title" required placeholder="<spring:message code='header.title' />"> <br>
<input type="text" name="content" required placeholder="<spring:message code='header.content' />"> <br>
<input type="file" name="fileUpload" onchange="thumbnail(this);"> <br>
<input type="submit" value="<spring:message code='header.btn' />">
</form>
<hr>
<img alt="<spring:message code='body.image' />" src="" id="thumbnailImage">
<hr>
<a href="main.do"><spring:message code="footer.gobackmain" /></a>
<script>
function thumbnail(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
document.getElementById('thumbnailImage').src = e.target.result;
};
reader.readAsDataURL(input.files[0]);
}
else {
document.getElementById('thumbnailImage').src = "";
}
}
</script>
</body>
</html>
이제 ViewResolver를 사용하는 것이므로 해당 페이지에 바로 접근하지 못한다
※ redirect를 사용하면 새로운 요청이기 때문에 local 정보가 사라진다
∴ local 정보를 활용하고 싶다면 foward 방식으로 요청해야 한다
2023.07.31 - [Web] - [Web] day38 : 데이터 전송(foward / sendRedirect)
소스코드 보러가기
'자바 > Spring' 카테고리의 다른 글
[Spring] day72 : 스프링 레거시 프로젝트에서 별도의 라이브러리 없이 진행할 수 있는 비동기처리 (2) | 2023.08.22 |
---|---|
[Spring] day70 : NULL update 이슈 (1) | 2023.08.20 |
[Spring] day70 : 예외 발생 처리 페이지 (0) | 2023.08.18 |
[Spring] day69 : 파일 업로드 예제 (2) | 2023.08.17 |
[Spring] day68 : JDBC Template (0) | 2023.08.17 |