[java] Google Guice로 다국어 처리하기

다국어 지원은 애플리케이션 개발에서 중요한 부분입니다. 사용자가 다른 언어로 애플리케이션을 사용할 수 있도록 지원하는 것은 글로벌 시장에서 경쟁력을 확보하는 데 도움이 됩니다. 이번 포스트에서는 Google Guice를 사용하여 다국어 처리를 구현하는 방법을 알아보겠습니다.

1. 다국어 처리를 위한 리소스 파일 작성

다국어 처리를 위해 먼저 리소스 파일을 작성해야 합니다. 이 리소스 파일에는 각 언어에 대한 텍스트 리소스가 포함되어 있습니다. 각 언어별로 다른 리소스 파일을 작성하여 관리할 수 있습니다. 예를 들면 다음과 같이 messages_en.propertiesmessages_ko.properties 파일을 작성할 수 있습니다.

messages_en.properties (영어 리소스 파일)

greeting=Hello
button.text=Click Me

messages_ko.properties (한국어 리소스 파일)

greeting=안녕하세요
button.text=클릭해주세요

2. 다국어 처리를 위한 모듈 설정

Google Guice를 사용하여 다국어 처리를 구현하려면 다음과 같이 모듈을 설정해야 합니다. Guice의 Multibinder를 사용하여 지원할 언어에 대한 바인딩을 만들고 해당 언어의 리소스 파일을 로드하여 사용할 수 있습니다.

import com.google.inject.AbstractModule;
import com.google.inject.multibindings.MapBinder;

public class I18nModule extends AbstractModule {
    @Override
    protected void configure() {
        // Multibinder를 사용하여 언어별 리소스 바인딩 생성
        MapBinder<String, ResourceBundle> resourceBinder = MapBinder.newMapBinder(binder(), String.class, ResourceBundle.class);

        // 영어 리소스 파일 바인딩
        resourceBinder.addBinding("en").toInstance(ResourceBundle.getBundle("messages_en"));

        // 한국어 리소스 파일 바인딩
        resourceBinder.addBinding("ko").toInstance(ResourceBundle.getBundle("messages_ko"));
    }
}

3. 다국어 처리를 위한 서비스 구현

다국어 처리를 위한 서비스를 구현해봅시다. 이 서비스는 언어 코드를 받아와 해당 언어의 리소스를 사용하여 다국어 텍스트를 제공합니다.

import com.google.inject.Inject;
import com.google.inject.name.Named;

public class I18nService {

    private final ResourceBundle resourceBundle;

    @Inject
    public I18nService(@Named("en") ResourceBundle resourceBundle) {
        this.resourceBundle = resourceBundle;
    }

    public String getText(String key) {
        return resourceBundle.getString(key);
    }
}

4. 다국어 처리 기능 사용

이제 다국어 처리 기능을 사용해봅시다. I18nModule을 Guice 모듈로 등록하고 I18nService를 주입받아 사용할 수 있습니다.

import com.google.inject.Guice;
import com.google.inject.Injector;

public class Application {

    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new I18nModule());

        I18nService i18nService = injector.getInstance(I18nService.class);
        
        String greeting = i18nService.getText("greeting");
        String buttonText = i18nService.getText("button.text");
        
        System.out.println(greeting); // 출력: Hello
        System.out.println(buttonText); // 출력: Click Me
    }
}

위의 예제에서는 I18nService를 생성할 때 영어 리소스 파일을 바인딩하도록 설정했습니다. 다국어를 지원하기 위해서는 언어에 따라 적절한 리소스 파일을 바인딩하도록 설정하면 됩니다.