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
        • 요리
        • 영화
        • 드라마
        • 제품
        • 게임
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바