[java] SLF4J에서 메시지 국제화 지원하기

SLF4J(Simple Logging Facade for Java)는 자바 어플리케이션에서 로깅을 위한 간단한 인터페이스를 제공하는 라이브러리입니다. SLF4J를 사용하면 로그 메시지를 쉽게 출력하고 관리할 수 있습니다. 이번에는 SLF4J에서 메시지 국제화(i18n)를 지원하는 방법에 대해 알아보겠습니다.

1. SLF4J에서 국제화를 위한 설정

SLF4J에서 메시지 국제화를 위해 MessageFormatter 클래스를 사용합니다. 이 클래스에는 중괄호를 이용한 메시지 템플릿을 파라미터화하는 기능이 제공됩니다. 먼저, 관련 의존성을 추가합니다.

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.32</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.32</version>
</dependency>

그리고 resources 폴더에 messages.propertiesmessages_ko.properties 파일을 생성합니다. messages.properties 파일에는 영어로 된 메시지 템플릿을, messages_ko.properties 파일에는 한국어로 된 메시지 템플릿을 작성합니다.

2. 메시지 템플릿 작성하기

영어로 된 메시지 템플릿(messages.properties) 파일에 다음과 같은 내용을 작성합니다.

welcome=Welcome, {0}!

한국어로 된 메시지 템플릿(messages_ko.properties) 파일에는 다음과 같은 내용을 작성합니다.

welcome=환영합니다, {0}님!

3. 메시지 국제화 예제

이제 메시지 국제화를 사용하는 간단한 예제 코드를 작성해보겠습니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.helpers.MessageFormatter;

public class InternationalizationExample {
    private static final Logger logger = LoggerFactory.getLogger(InternationalizationExample.class);

    public static void main(String[] args) {
        String name = "John";
        logger.info(MessageFormatter.format(getMessage("welcome"), name).getMessage());
    }

    private static String getMessage(String key) {
        return getMessage(key, "messages");
    }

    private static String getMessage(String key, String bundleName) {
        ResourceBundle bundle = ResourceBundle.getBundle(bundleName, Locale.getDefault());
        return bundle.getString(key);
    }
}

위 예제 코드는 InternationalizationExample 클래스에서 logger.info()를 사용하여 로그 메시지를 출력합니다. getMessage() 메서드는 지정된 키에 해당하는 메시지를 messages.properties 파일에서 읽어옵니다. 메시지의 파라미터로 name 변수 값을 전달하여 메시지를 국제화합니다.

4. 실행 결과

위 예제 코드를 실행하면 로그 메시지가 출력됩니다. 첫 번째 실행 시 로그 메시지는 영어로 출력되고, 두 번째 실행 시 로그 메시지는 한국어로 출력됩니다.

영어 출력 결과:

Welcome, John!

한국어 출력 결과:

환영합니다, John님!

이처럼 SLF4J를 이용하여 메시지 국제화를 구현할 수 있습니다. 국제화된 메시지를 이용하면 다국어 인터페이스를 구현하는 어플리케이션에서 사용자에게 더욱 친숙한 경험을 제공할 수 있습니다.

참고: SLF4J - Internationalization and Localization