[Spring] properties와 locale

내용
properties
locale
진행일시
2021/03/17
속성

1. properties이용법

1.
resources 파일을 생성한다.
2.
buildPath을 이용하여 resources 파일을 Source탭에 add 해준다.
3.
resources 파일안에다가 properties파일을 추가하며 내용을key, value형식으로 작성한다.
4. ContextConfiguration 클래스를 생성하며 @Configuration과 @PropertySource("")를 사용한다.
5 .properties파일에 저장된 키 값을 value 어노테이션에다가 넣어준다.(@Value)
6. @Value 에다가 공백까지 포함하여 값을 입력하면 공백도 값으로 읽기때문에 공백은제거해줘야한다.
7. 표현식은 @Value("${bread.carpbread.name}")식으로 하며 properties파일에 key, value값이 없는경우 @Value("${bread.carpbread.name : 붕어빵}") 이렇게 표현할 수 도있다 . 그러면 붕어빵이라는 이름을 가져오게된다.

2. javaconfig에서 예시

package com.greedy.section01.properties.javaconfig.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.Scope; import com.greedy.section01.properties.javaconfig.Beverage; import com.greedy.section01.properties.javaconfig.Bread; import com.greedy.section01.properties.javaconfig.Product; import com.greedy.section01.properties.javaconfig.ShoppingCart; @Configuration //properties파일을 이용한 방식은 많이 사용되는 방식중 1개 이다 @PropertySource("product-info.properties") public class ContextConfiguration { /*product-info.properties에 저장된 키값을 value 어노테이션에다가 넣어준다 * @Value에서 공백을주면 공백도 키값으로 여기기때문에 공백은제거해줘야한다*/ @Value("${bread.carpbread.name:붕어빵}") private String carpBreadName; @Value("${bread.carpbread.price:777}") private int carpBreadPrice; @Value("${beverage.milk.name:}") private String milkName; @Value("${beverage.milk.price:77}") private int price; @Value("${beverage.milk.capacity:0}") private int capacity; @Bean public Product carpBread() { return new Bread(carpBreadName, carpBreadPrice, new java.util.Date()); } @Bean public Product milk() { return new Beverage(milkName, price, capacity); } @Bean public Product water(@Value("${beverage.water.name:}") String waterName, @Value("${beverage.water.price:0}") int waterPrice, @Value("${beverage.water.capacity:0}") int waterCapacity) { return new Beverage(waterName, waterPrice, waterCapacity); } @Bean @Scope("prototype") public ShoppingCart cart() { return new ShoppingCart(); } }
Java
복사

3. xmlconfig예시

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <context:property-placeholder location="product-info.properties"/> <bean id="carpBread" class="com.greedy.section01.properties.xmlconfig.Bread"> <constructor-arg name="name" value="${bread.carpbread.name:붕어빵}"/> <constructor-arg name="price" value="${bread.carpbread.price:1500}"/> <constructor-arg name="bakedDate" ref="today"/> </bean> <bean id="today" class="java.util.Date" scope="prototype"/> <bean id="milk" class="com.greedy.section01.properties.xmlconfig.Beverage"> <constructor-arg name="name" value="${beverage.milk.name :sad}"/> <constructor-arg name="price" value="${beverage.milk.price}"/> <constructor-arg name="capacity" value="${beverage.milk.capacity}"/> </bean> <bean id="water" class="com.greedy.section01.properties.xmlconfig.Beverage"> <constructor-arg name="name" value="${beverage.water.name}"/> <constructor-arg name="price" value="${beverage.water.price}"/> <constructor-arg name="capacity" value="${beverage.water.capacity}"/> </bean> <bean id="cart" class="com.greedy.section01.properties.xmlconfig.ShoppingCart" scope="prototype"> </bean> </beans>
XML
복사

4. locale

locale이란 ? 세계 여러 나라들은 각자 다른 문화(언어, 날짜, 시간 등)을 갖고 있다. 프로그램의 국제화(Internationalization, 줄여서 i18n)는 사용자로 하여금 프로그램 수행시 로케일이란 것에 의해 입맛에 맞는 환경을 선택할 수 있도록 만든 것을 말한다.

- I18N 소프트웨어 국제화의 특징

1.
I부터 N까지 총 18개
2.
언어 ,지역별 번역
3.
OS/플랫폼 인코딩
4.
문자열 치환방법 : 서버쪽, 클라이언트 쪽 치환중 서버쪽에서 하는 것이 더 좋다. ( 경우에 따라 다르긴 함)
5.
국제화 UI (문자열 크기 변화, 폰트, 아이콘)
6.
쓰기 방향차이
7.
숫자 , 공백, 화폐, 날짜, 주소, 측정단위 등
8.
타임존, 섬머타임 등 시각
9.
문자열 정렬방법

4-1 locale 파일 설정순서

1.
resource폴더를 만들고 buildPath에서 source탭에 추가시켜준다
2.
message_en_US.properties 파일을 생성한다. 이거는 정해진 형식이므로 지켜주도록하자 만약 한국어로 된 properties를 만들려고하면 message_ko_KR.properties 파일로 생성하면된다.

4-2 예제

1. properties파일에 key,value형식으로 만들어준다 (key) (value) error.404=Page Not Found!! error.500=something wrong! The developer`s falut. who is developer? It`s {0} at {1} 2. ContextConfiguration 설정방법 @Configuration public class ContextConfiguration { @Bean public ReloadableResourceBundleMessageSource messageSource() { 접속하는 세션의 로케일에 따라 자동 재로딩하는 용도의 MessageSource */ ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 다국어 메세지를읽어올 properties 파일의 기본이름을 설정한다. 로케일이 존재하지 않는 경우 해당 파일을 읽어온다 messageSource.setBasename("message"); messageSource.setCacheSeconds(10); messageSource.setDefaultEncoding("UTF-8"); return messageSource; } 3. Application 설정 package com.greedy.section02.locale.javaconfig; import java.util.Date; import java.util.Locale; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import com.greedy.section02.locale.javaconfig.config.ContextConfiguration; public class Application { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(ContextConfiguration.class); String error404Message = context.getMessage("error.404", null, Locale.KOREA); properties파일 value형식에 {0}, {1} 부분을 new Object[]라는 걸로 정의하여 {}값에 값을 넣어준다 String error500Message = context.getMessage("error.500", new Object[]{"namgyu", new Date()}, Locale.US); System.out.println("The I18N message for error.404: " + error404Message); System.out.println("The I18N message for error.500: " + error500Message); } }
Java
복사