Spring Boot 다국어 Message 사용

2023. 7. 20. 13:38·dev/Spring Boot
728x90
반응형
SMALL

안녕하세요.

오늘은 Spring Boot에서 다국어를 사용하는 방법을 설명하겠습니다. 

Spring boot에 WebMvcConfigurer 를 상속받아서 설정을 하시면 됩니다. 

 

프로젝트를 생성하고 config 클래스 만들어 줍니다. 

기존에 사용하고 있는 프로젝트라면 WebMvcConfigurer 상속받은 클래스에 추가적으로 해당 내용들을 넣어주시면 됩니다. 

이렇게 설정을 하면 API 호출시 헤더에 Accept-Language 값으로 언어를 구분할 수 있습니다. 

추가적인 언어를 추가하기 위해서 CustomLocaleResolver에 en, ko 부분을 추가적으로 넣어주시면 됩니다. 

예제로 만든 부분이여서 해당 데이터는 하드코딩으로 작업되었습니다. 

 

STEP1 다국어 설정 클래스 작성

import lombok.extern.log4j.Log4j2;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

@Log4j2
@Configuration
@PropertySource("classpath:application.yml")
@ComponentScan("server")
public class ServletConfig implements WebMvcConfigurer {


    @Bean
    public LocaleResolver localeResolver() {
        CustomLocaleResolver customLocaleResolver = new CustomLocaleResolver();
        customLocaleResolver.setDefaultLocale(Locale.KOREA);
        return customLocaleResolver;
    }


    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }


    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(60);
        messageSource.setUseCodeAsDefaultMessage(true);
        return messageSource;
    }

    @Bean(name = "messageSourceAccessor")
    public MessageSourceAccessor messageSourceAccessor(MessageSource messageSource) {
        return new MessageSourceAccessor(messageSource, Locale.getDefault());
    }


    public static class CustomLocaleResolver extends AcceptHeaderLocaleResolver {

        String[] mLanguageCode = new String[]{"ko", "en"};
        List<Locale> mLocales = Arrays.asList(new Locale("en"), new Locale("es"), new Locale("ko"));

        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            // 언어팩 변경
            String acceptLanguage = request.getHeader(HttpHeaders.ACCEPT_LANGUAGE);
            if (acceptLanguage == null || "".equals(acceptLanguage)) {
                return Locale.getDefault();
            }
            List<Locale.LanguageRange> list = Locale.LanguageRange.parse(request.getHeader("Accept-Language"));

            mLocales = new ArrayList<>();
            for (String code : mLanguageCode) {
                mLocales.add(new Locale(code));
            }
            return Locale.lookup(list, mLocales);
        }
    }

}
반응형

STEP2  국가별 언어 작성 

프로젝트  resources  아래의 국가별 properties를 작성해 줍니다. 

한국어

messages_ko.properties

영어

messages_en.properties

 

ko, en 은 위에서 설정한 en, ko입니다. 

다국어 messages 파일

파일을 만들고 나서 properties에 내용을 작성합니다. 

다국어 설정

messages_ko.properties

RESULT_MSG_SUCCESS=성공

messages_en.properties

RESULT_MSG_SUCCESS=SUCCESS

RESULT_MSG_SUCCESS는 JAVA에서 사용될 KEY 값입니다. 

메시지 내용은 각 언어에 맞게 작성해주시면 됩니다. 

RESULT_MSG_SUCCESS는 편하게 만들어주시면 됩니다. 

이렇게 메시지들을 키-벨류로 모아서 

가지고 있습니다. 

 

STEP3 messageUtils 만들기

사용하기 편하게 유틸클래스를 만들어 줍니다. 

@Comppnet를 넣어 만들어서 

@Autowired를 사용이 가능합니다. 

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

/**
 * 메시지 정보를 전달하는 유틸
 * 메시지는 코드로 구분 (다국어)
 */

@Component
public class MessageUtils {
    private MessageSource messageSource;

    public  MessageUtils(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    /**
     * 언어팩 언어 가져오기
     *
     * @param code 언어팩 코드
     * @return String
     */

    public String getMessage(String code) {
        return messageSource.getMessage(code, null, LocaleContextHolder.getLocale());
    }

    /**
     * 언어팩 언어 가져오기
     *
     * @param code 언어팩 코드
     * @param strs 동적 문자
     * @return String
     */

    public String getMessage(String code, String[] strs) {
        return messageSource.getMessage(code, strs, LocaleContextHolder.getLocale());
    }

}

STEP4 사용하기

Controller를 만들고 MessageUtils를 사용해서 아까 만든 키값을 넣어주면 끝입니다. 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import server.application.utils.MessageUtils;

/**
 * 맴버 관련 컨트롤러
 */
@RestController
public class MemberController {


    @Autowired
    MessageUtils messageUtils;


    @RequestMapping(method = RequestMethod.POST, path = "/api/v1/member")
    public @ResponseBody
    String join() {
        return messageUtils.getMessage("RESULT_MSG_SUCCESS");
    }

}

postman을 통해 방금 만든 API를 테스트해 보겠습니다. 

언어설정 후 사용하면 됩니다. 

기본 언어는 한국어 입니다.

 

Accept-Language를 ko로 하면 성공이라는 글자가 나오고 

다국어 확인 한국어

Accept-Language를 en으로 하면 SUCCESS글자가 나오는걸 확인할 수 있습니다.

다국어 확인 영어

해당 게시글은 가단한 사용법만 제공한다는 점 알아두시면 좋겠습니다. 

실제로 사용자에 따라 커스텀 또는 사용방법이 다를 수 있습니다. 

기본적인 구조만 파악하시고 각자 프로젝트 및 본인 스타일에 맞게 사용하시면 될 듯합니다. 

감사합니다. 

728x90
반응형
LIST
저작자표시 (새창열림)

'dev > Spring Boot' 카테고리의 다른 글

JEUS JNI Native Library so 파일 적용기  (112) 2024.05.16
Spring Boot JPA 기초 및 셋팅  (1) 2023.07.22
[오라클]Oracle DB XE 무료버전 설치 및 설치 오류 방법  (2) 2022.12.06
Spring Boot MyBatis 로 MySql 연동하기 Gradle  (5) 2021.08.07
'dev/Spring Boot' 카테고리의 다른 글
  • JEUS JNI Native Library so 파일 적용기
  • Spring Boot JPA 기초 및 셋팅
  • [오라클]Oracle DB XE 무료버전 설치 및 설치 오류 방법
  • Spring Boot MyBatis 로 MySql 연동하기 Gradle
NCJ
NCJ
일상과 개발을 공유하고 소통하는 블로그입니다.
    반응형
    250x250
  • NCJ
    NCJ 프로그래밍
    NCJ
  • 전체
    오늘
    어제
    • ALL
      • dev
        • android
        • java
        • Spring Boot
        • node.js
        • MFC
        • react-native
        • web
        • 기타
        • vue
        • react
      • 일상
        • news
        • 요리
        • 영화
        • 드라마
        • 제품
        • 게임
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    던파 모바일 사전캐릭 생성
    리니지w 이벤트 안내
    사전캐릭
    java
    갤럭시 버즈2
    던파 모바일 사전캐릭
    갤럭시 워치 4
    던파 출시일
    CSS
    리니지W 사전예약
    코딩문제
    던파 서버 오픈
    던파 사전캐릭
    리니지w
    삼성
    갤럭시
    apache
    window webserver
    게임
    안드로이드
    리니지
    다이어트
    던파 모바일 서버오픈
    Android
    리니지w 오픈
    php
    리니지w 보상
    던파 캐릭생성
    Web
    리니지w 이벤트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
NCJ
Spring Boot 다국어 Message 사용
상단으로

티스토리툴바